1. 程式人生 > >Maven使用總結(一):Maven座標配置

Maven使用總結(一):Maven座標配置

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座標詳解

  1. groupId
    一般對應專案名稱。例如:com.qupeng.test.maven,專案名稱是maven
  2. artifactId
    一般對應模組名稱。例如:maven-coordinate,模組名稱是coordinate,一般還建議加上專案字首
  3. version
    模組版本。例如:1.2.0-beta-1,該版本號由4部分組成。表示maven專案的coordinate模組的架構版本是1,功能版本是2,增量版本是0,里程碑版本是beta-1。
    • 主版本
      專案重大架構變更時遞增。
    • 次版本
      大範圍的功能增加和變化時遞增。
    • 增量版本
      重大Bug的修復。
    • 里程碑版本
      某一個版本的里程碑。
  4. 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:壓縮檔案。
  5. 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外掛完成的。