1.為何需要maven
確定框架之后,會去對應官網(wǎng)下載對應的jar,有可能出現(xiàn)以下問題
-
jar包沖突
-
jar臃腫(會下載很多相關(guān)jar,無法確認哪一些無用)
-
如何進行高效的測試
maven就可以解決以上問題
2.maven是什么
管理項目的構(gòu)建,報告,文檔的軟件項目管理工具,基于POM(project object Model)項目對象模型
3.maven環(huán)境變量搭建
-
下載http://maven.apache.org/download.cgi
-
這里使用 Binary zip archive 3.5.2
-
解壓
-
根據(jù)版本,有對java環(huán)境的要求
-
環(huán)境變量添加M2_HOME: (F:\hadoop\apache-maven-3.5.2)
-
將M2_HOME添加到path末尾中%M2_HOME%\bin
-
驗證,cmd中輸入命令mvn -v
4.maven解壓目錄
-
bin:包含了maven運行腳本
-
boot:類加載框架,maven使用此加載自己類庫
-
conf:配置文件信息
-
lib:包含maven運行時所需的java類庫
5.maven 目錄結(jié)構(gòu)
mvn help:system ->
打印出所有的系統(tǒng)屬性和環(huán)境變量
maven創(chuàng)建的java項目常用的目錄結(jié)構(gòu)簡單介紹:
src
--main
--java
--package
--resource
--test
--java
--package
--resource
pom.xml
main/java項目源代碼所在目錄
main/resources項目資源文件所在目錄
test/java測試目錄
test/resource 測試相關(guān)資源文件目錄
pom.xml項目工程的描述文件
6.maven hello world
-
創(chuàng)建文件夾F:\hadoop\maven01\src\main\java\com\zhang\maven\helloworld
-
新建Helloworld.java
package com.zhang.maven.helloworld;
public class HelloWorld{
public String sayHello(){
return "hello maven";
}
}
-
新建測試文件,文件目錄一定要對
-
新建F:\hadoop\maven01\src\test\java\com\zhang\maven\helloworld\HelloworldTest.java
-
代碼中的包名需要一致
package com.zhang.maven.helloworld;
import org.junit.*;
public class HelloWorldTest{
public void testHello(){
Assert.assertEquals("hello maven",new HelloWorld().sayHello());
}
}
-
pom文件進行描述,與src同目錄,一般看官網(wǎng)提供
-
在maven的lib中解壓jar查看xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!--指定當前pom版本-->
<modelVersion>4.0.0</modelVersion>
<!--項目包名:公司地址名稱反寫+項目名稱-->
<groupId>com.zhang.maven</groupId>
<!--項目模塊名稱:一般為 項目名-模塊名-->
<artifactId>maven-demo1</artifactId>
<!--
第一個數(shù)字: 大版本號
第二個數(shù)字: 分支版本號
第三個數(shù)字: 小版本號
SNAPSHOT:快照
Release: 發(fā)布版本
Alpha: 內(nèi)部測試版本
GA;正式發(fā)布版本
-->
<version>1.0.0SNAPSHOT</version>
</project>
-
進入到項目pom當前目錄編譯下
7.常用命令
-
mvn -v 或mvn -version 驗證環(huán)境變量
-
mvn help:system :打印出所有的系統(tǒng)屬性和環(huán)境變量
-
mvn compile : 編譯項目源碼,不包括測試代碼,會產(chǎn)生Target文件
-
mvn test:測試
-
錯誤原因: junit沒有依賴,在pom.xml中添加<dependencies>
<!--
在maven 中,任何一個依賴,插件以及項目構(gòu)建輸出都是通過坐標唯一標示
maven中的坐標
1.groupId
2.artifactId
3.version
4.packaging
5.classifer
-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
-
然后編譯mvn test
-
mvn test -compile編譯+測試
-
mvn clean 刪除target文件
8.maven默認下載地址
mvn compile會去下載所依賴的jar包
https://repo.maven.apache.org/maven2/junit/junit/xxx
地址是在
F:\hadoop\apache-maven-3.5.2\lib\maven-model-builder-3.5.2\org\apache\maven\model\pom-4.0.0.xml中的
<url>https://repo.maven.apache.org/maven2</url>
<repositories>
<repository>
<id>central</id>
<!--倉庫名稱-->
<name>Central Repository</name>
<!--鏈接地址-->
<url>https://repo.maven.apache.org/maven2</url>
<!--默認路徑-->
<layout>default</layout>
<!--禁止下載-->
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
maven提供的中央倉庫,下載流程
1.本地倉庫查找是否有對應的jar
2.沒有就去默認maven倉庫下載
本地倉庫
配置F:\hadoop\apache-maven-3.5.2\conf\setting.xml
maven鏡像倉庫:
maven的中央遠程倉庫是在國外,進行屏蔽,因此國內(nèi)的將下載的jar提供給大家下載
需要在settings.xml中的mirror標簽中進行配置
url改成配置鏡像地址
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
NOTE:
maven settings.xml 不要去修改maven安裝目錄下的conf/settings.xml(全局),建議拷貝到對應的本地倉庫目錄下面
(C:\Users\zhanghua.m2\settings.xml)
7.常用命令
分模塊編寫
新建一個maven02 helloMaven,然后maven02要引用maven01的helloWorld
package com.zhang.maven.hellomaven;
//引用helloworld
import com.zhang.maven.helloworld.HelloWorld;
public class HelloMaven{
public String sayMaven(){
return new HelloWorld().sayHello();
}
}
解決方法
1.將引用的jar添加到本地倉庫( mvn install)
2.將jar包的依賴添加到pom.xml
3.如何查看本地倉庫
根據(jù)坐標
groupId+artifactId
<!--項目包名:公司地址名稱反寫+項目名稱-->
<groupId>com.zhang.maven</groupId>
<!--項目模塊名稱:一般為 項目名-模塊名-->
<artifactId>maven-demo1</artifactId>
在本地倉庫中找到了
三命令聯(lián)合mvn clean compile install