1. 程式人生 > >Maven 基本配置知識

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