Maven 基本配置知識
Maven遵循 : Convention over Configuration 約定優於配置
文章目錄
1.maven 的配置檔案
1.1 載入順序
~/.m2/setting.xml -> conf/setting.xml(maven解壓包裡面的)
1.2 配置setting.xml
#本地倉庫地址
<localRepository>/path/to/local/repo</localRepository>
#映象下載,相比普通的下載,
<mirrors>
#阿里提供的映象倉庫下載更加快
<mirror>
<id>alimaven</id>
<name>aliyun maven</name >
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
#其他映象倉庫
<mirror>
<id>ui</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name >
<url>http://uk.maven.org/maven2/</url>
</mirror>
<mirror>
<id>osc</id>
<mirrorOf>central</mirrorOf>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
<mirror>
<id>osc_thirdparty</id>
<mirrorOf>thirdparty</mirrorOf>
<url>http://maven.oschina.net/content/repositories/thirdparty/</url>
</mirror>
</mirrors>
1.3 setting.xml的其他配置
可以百度下,或者看setting.xml中的英文說明。
2.Maven的外掛執行機制
Maven的所有構成都是由plugin構成。
在這個包中,${M2_HOME}/lib/maven-model-builder-3.0.4.jar,開啟該檔案,能找到超級父POM:\org\apache\maven\model\pom-4.0.0.xml,它是所有Maven POM的父POM,所有Maven專案都繼承該配置。
具體可以參考:http://www.cnblogs.com/AlanLee/p/6208562.html
3.Maven的pom.xml
<!-- 指的就是上面的超級父pom -- >
<modelVersion>4.0.0</modelVersion>
<!-- 用座標的方式來唯一定製jar的唯一性 -- >
<groupId>com.vison</groupId> <!-- 公司域名倒寫 -- >
<artifactId>testhttps</artifactId> <!-- 功能命名 -- >
<version>0.0.1-SNAPSHOT</version> <!-- 版本號 -- >
<!-- 父型別都為pom型別 jar內部呼叫或者是作服務使用 war需要部署的專案-- >
<packaging>jar</packaging> <!-- 打包方式預設是jar 專案的打包型別有:pom、jar、war、maven-plugin等-- >
<parent></parent> <!-- 配置父工程的座標 -- >
<!-- 這個是定義變數,一般可以在父pom檔案中定義版本號 -- >
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement></dependencyManagement> <!-- 只能放在父pom檔案中 -- >
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- scope的值定義
* compile,預設值,適用於所有階段,會隨著專案一起釋出,會打包
* provided,類似compile,期望JDK、容器或使用者會提供這個依賴,其他提供後採用。如servlet.jar,不會打包
* runtime,只在執行時使用,如JDBC驅動,適用執行和測試階段,與compile相比,跳過了編譯而已,會打包
* test,只在測試時使用,用於編譯和執行測試程式碼。不會隨專案釋出, 不會打包
* system,類似provided,需要顯式提供包含依賴的jar,通過 systemPath指定路徑;一般都不會用 Maven不會在Repository中查詢它
* 具體可以參考 https://www.cnblogs.com/hzzll/p/6738955.html
-- >
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!-- exclusions 排除包中依賴的包,例如排除依賴包中的日誌包 -- >
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
其他:
1)依賴仲裁
當一個模組同時依賴了兩個相同的jar包,最終選擇哪個jar,取決於如下兩個準則:
- 最短路徑原則
- 載入先後原則
2)scope的傳遞
第一列表示直接依賴的scope,第一行表示間接依賴的scope
compile | test | provided | runtime | |
---|---|---|---|---|
compile | compile | - | - | runtime |
test | test | - | - | test |
provided | provided | - | provided | provided |
runtime | runtime | - | - | runtime |
4.版本管理
4.1 1.0-SNAPSHOT命名
SNAPSHOT是快照版本,不穩定版本,如果依賴包中有SNAPSHOT版本,要更新這個包可以兩種方式:
- 1)刪除本地repository
- 2)執行命令:mvn clean package -U (強制拉一次)
如果要釋出上線,一定是要用RELAESE版本。
具體的release和snapshot 區別可以參考:
https://blog.csdn.net/yxz8102/article/details/80975542
4.2 版本名稱
主版本號.次版本號.增量版本號-<里程碑版本>
1.0.0-RELAESE
5.Maven的生命週期
1)層級關係:lifecycle/phase/goal;
- A Build Lifecycle is Made Up of Phases(Lifecycle 是由phase構成)
- A Build Phase is Made Up of Plugin Goals(Phase 是由Goals構成)
Maven有三套相互獨立的生命週期,分別是clean、default和site。每個生命週期包含一些階段(phase),階段是有順序的,後面的階段依賴於前面的階段。執行後面的phase會把之前的全都執行。
- clean:清理上一次構建生成的檔案
- compile:編譯專案的原始碼。
- package:把已編譯的程式碼打包成可釋出的格式,比如jar。
- site:生成專案站點文件
2)外掛可以放在生命週期某個地方執行
6. Maven常用命令
- compile 編譯成class檔案
- clean 刪除target/
- test 執行test檔案內容
- package 打包
- install 把專案install到 local repo;如果是多模組都需要先install,因為其他模組引用的是jar包,而不是編譯後target中的class檔案。
- deploy 把本地jar釋出到remote