Maven使用總結(一):Maven座標配置
阿新 • • 發佈:2019-01-30
Maven座標配置
一個maven專案的座標可以包含如下配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qupeng.test.maven</groupId >
<artifactId>maven-coordinate</artifactId>
<name>Maven Coordinate</name>
<version>1.2.3-beta-1</version>
<package>jar</package>
</project>
除了上述元素,還有一個 特殊的元素:classifier。這個元素是不能直接定義的,要結合Maven Plugin使用。
Maven座標詳解
- groupId
一般對應專案名稱。例如:com.qupeng.test.maven,專案名稱是maven - artifactId
一般對應模組名稱。例如:maven-coordinate,模組名稱是coordinate,一般還建議加上專案字首 - version
模組版本。例如:1.2.0-beta-1,該版本號由4部分組成。表示maven專案的coordinate模組的架構版本是1,功能版本是2,增量版本是0,里程碑版本是beta-1。
- 主版本
專案重大架構變更時遞增。 - 次版本
大範圍的功能增加和變化時遞增。 - 增量版本
重大Bug的修復。 - 里程碑版本
某一個版本的里程碑。
- 主版本
- package
依賴的型別,對應於專案座標定義的packaging,預設值為jar。可配置為如下型別:
- pom:代表父模組或聚合模組。
- jar:一般的jar包模組,包含Java類的普通庫、資源(resources)、輔助檔案(auxiliary files)等。
- maven-plugin:maven外掛模組。
- ejb:ejb應用模組。
- war:包含全部Web應用程式。在這種情形下,一個Web應用程式被定義為單獨的一組檔案、類和資源,使用者可以對jar檔案進行封裝,並把它作為小型服務程式(servlet)來訪問。
- ear:包含全部企業應用程式。在這種情形下,一個企業應用程式被定義為多個jar檔案、資源、類和Web應用程式的集合。
- rar:壓縮檔案。
- par:壓縮檔案。
- classifier
用來定義專案附屬構件或分類構件的座標。classifier用來區分從同一個POM構建,但內容不同的構件,它是一些可選的和任意的字串。如果classifier存在,則被附加到版本號之後,規則為: artifactId-version[-classifier].packaging,[-classifier]為可選。
此元素的作用一般有兩種:
- 區分不同版本的JRE。例如一個構件既支援JDK1.4,又支援JDK1.5,而且不同的支援包含不同的內容,就需要新增一個classifier座標屬性,讓客戶端來選擇使用基於哪一個JDK的版本。例如,對json-lib的引用,座標就需要包含classifier元素,不然座標是錯誤的。
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.2.2</version>
<classifier>jdk15</classifier>
</dependency>
我認為專案的構建過程類似於下面的配置:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
打包配置應該是這樣的
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<extensions>false</extensions>
<inherited>true</inherited>
<configuration>
<classifier>jdk15</classifier>
</configuration>
<dependencies>...</dependencies>
<executions>...</executions>
</plugin>
</plugins>
</build> - 為專案新增附屬構件。 例如Maven中央倉庫中的source和javedoc構件,對應的classifier為source和javedoc。如何新增classifier?這項工作我們並不能干涉,我想應該是由maven外掛完成的。
- 區分不同版本的JRE。例如一個構件既支援JDK1.4,又支援JDK1.5,而且不同的支援包含不同的內容,就需要新增一個classifier座標屬性,讓客戶端來選擇使用基於哪一個JDK的版本。例如,對json-lib的引用,座標就需要包含classifier元素,不然座標是錯誤的。