1. 程式人生 > >Maven--pom.xml 配置詳解

Maven--pom.xml 配置詳解

pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。

複製程式碼
<project>
  <modelVersion>4.0.0</modelVersion>
<!--maven2.0必須是這樣寫,現在是maven2唯一支援的版本-->
  <!-- 基礎設定 -->
  <groupId>...</groupId>
  <artifactId>...</
artifactId> <version>...</version> <packaging>...</packaging> <name>...</name> <url>...</url> <dependencies>...</dependencies> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <modules
>...</modules> <properties>...</properties> <!--構建設定 --> <build>...</build> <reporting>...</reporting> <!-- 更多專案資訊 --> <name>...</name> <description>...</description> <url>...</url> <inceptionYear
>...</inceptionYear> <licenses>...</licenses> <organization>...</organization> <developers>...</developers> <contributors>...</contributors> <!-- 環境設定--> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories> <distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>
複製程式碼

基本內容:

POM包括了所有的專案資訊

groupId:專案或者組織的唯一標誌,並且配置時生成路徑也是由此生成,如org.myproject.mojo生成的相對路徑為:/org/myproject/mojo

artifactId:專案的通用名稱

version:專案的版本

packaging:打包機制,如pom,jar,maven-plugin,ejb,war,ear,rar,par

name:使用者描述專案的名稱,無關緊要的東西,可選

url:應該是隻是寫明開發團隊的網站,無關緊要,可選

classifer:分類

其中groupId,artifactId,version,packaging這四項組成了專案的唯一座標。一般情況下,前面三項就可以組成專案的唯一座標了。

POM關係:主要為依賴,繼承,合成

依賴關係:

複製程式碼
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.0</version>
      <type>jar</type>
      <scope>test</scope>
      <optional>true</optional>
    </dependency>

 

    <dependency>

        <groupId>com.alibaba.china.shared</groupId>

        <artifactId>alibaba.apollo.webx</artifactId>

        <version>2.5.0</version>

        <exclusions>

          <exclusion>

            <artifactId>org.slf4j.slf4j-api</artifactId>

            <groupId>com.alibaba.external</groupId>

          </exclusion>

          ....

        </exclusions>

    ......

</dependencies>
複製程式碼

其中groupId, artifactId, version這三個組合標示依賴的具體工程,而且 這個依賴工程必需是maven中心包管理範圍內的,如果碰上非開源包,maven支援不了這個包,那麼則有有三種 方法處理:

1.本地安裝這個外掛install plugin

例如:mvn install:intall-file -Dfile=non-maven-proj.jar -DgroupId=som.group -DartifactId=non-maven-proj -Dversion=1

2.建立自己的repositories並且部署這個包,使用類似上面的deploy:deploy-file命令,

3.設定scope為system,並且指定系統路徑。

dependency裡屬性介紹:

type:預設為jar型別,常用的型別有:jar,ejb-client,test-jar...,可設定plugins中的extensions值為true後在增加 新的型別,

scope:是用來指定當前包的依賴範圍,maven的依賴範圍

optional:設定指依賴是否可選,預設為false,即子專案預設都繼承,為true,則子專案必需顯示的引入,與dependencyManagement裡定義的依賴類似 。

exclusions:如果X需要A,A包含B依賴,那麼X可以宣告不要B依賴,只要在exclusions中宣告exclusion.

exclusion:是將B從依賴樹中刪除,如上配置,alibaba.apollo.webx不想使用com.alibaba.external  ,但是alibaba.apollo.webx是集成了com.alibaba.external,r所以就需要排除掉.

如果一個工程是parent或者aggregation(即mutil-module的)的,那麼必須在packing賦值為pom,child工 程從parent繼承的包括:dependencies,developers,contributors,plugin lists,reports lists,plugin execution with matching ids,plugin configuration

parent的使用方法如下:

<parent>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>my-parent</artifactId>
    <version>2.0</version>
    <relativePath>../my-parent</relativePath>
  </parent>

relativePath是可選的,maven會首先搜尋這個地址,在搜尋本地遠端repositories之前.

dependencyManagement:是用於幫助管理chidren的dependencies的。例如如果parent使用 dependencyManagement定義了一個dependencyon junit:junit4.0,那麼 它的children就可以只引用 groupId和artifactId,而version就可以通過parent來設定,這樣的好處就是可以集中管理 依賴的詳情

modules:對於多模組的project,outer-module沒有必需考慮inner-module的dependencies,當列出modules的時候,modules的順序是不重要的,因為maven會自動根據依賴關係來拓撲排序,

modules例子如下 :

<module>my-project</module>

<module>other-project</module>

properties:是為pom定義一些常量,在pom中的其它地方可以直接引用。

定義方式如下:

複製程式碼
<properties>

      <file.encoding>UTF-8</file_encoding>

      <java.source.version>1.5</java_source_version>

      <java.target.version>1.5</java_target_version>

</properties>
複製程式碼

使用方式 如下 :

${file.encoding}

還可以使用project.xx引用pom裡定義的其它屬性:如$(project.version} 

build設定:

defaultGoal:預設的目標,必須跟命令列上的引數相同,如:jar:jar,或者與時期parse相同,例如install

directory:指定build target目標的目錄,預設為$(basedir}/target,即專案根目錄下的target

finalName:指定去掉字尾的工程名字,例如:預設為${artifactId}-${version}

filters:用於定義指定filter屬性的位置,例如filter元素賦值filters/filter1.properties,那麼這個 檔案裡面就可以定義name=value對,這個name=value對的值就可以在工程pom中通過${name}引用,預設的filter目錄 是${basedir}/src/main/fiters/

resources:描述工程中資源的位置

複製程式碼
<resource>
        <targetPath>META-INF/plexus</targetPath>
        <filtering>false</filtering>
        <directory>${basedir}/src/main/plexus</directory>
        <includes>
          <include>configuration.xml</include>
        </includes>
        <excludes>
          <exclude>**/*.properties</exclude>
        </excludes>
      </resource>
複製程式碼

targetPath:指定build資源到哪個目錄,預設是base directory

filtering:指定是否將filter檔案(即上面說的filters裡定義的*.property檔案)的變數值在這個resource檔案有效,例如上面就指定那些變數值在configuration檔案無效。

directory:指定屬性檔案的目錄,build的過程需要找到它,並且將其放到targetPath下,預設的directory是${basedir}/src/main/resources

includes:指定包含檔案的patterns,符合樣式並且在directory目錄下的檔案將會包含進project的資原始檔。

excludes:指定不包含在內的patterns,如果inclues與excludes有衝突,那麼excludes勝利,那些符合衝突的樣式的檔案是不會包含進來的。

testResources:這個模組包含測試資源元素,其內容定義與resources類似,不同的一點是預設的測試資源路徑是${basedir}/src/test/resources,測試資源是不部署的。

plugins配置:

複製程式碼
<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.0</version>
        <extensions>false</extensions>
        <inherited>true</inherited>
        <configuration>
          <classifier>test</classifier>
        </configuration>
        <dependencies>...</dependencies>
        <executions>...</executions>
      </plugin> 
複製程式碼

extensions:true or false, 決定是否要load這個plugin的extensions,預設為true.

inherited:是否讓子pom繼承,ture or false 預設為true.

configuration:通常用於私有不開源的plugin,不能夠詳細瞭解plugin的內部工作原理,但使plugin滿足的properties

dependencies:與pom基礎的dependencies的結構和功能都相同,只是plugin的dependencies用於 plugin,而pom的denpendencies用於專案本身。在plugin的dependencies主要用於改變plugin原來的 dependencies,例如排除一些用不到的dependency或者修改dependency的版本等,詳細請看pom的 denpendencies.

executions:plugin也有很多個目標,每個目標具有不同的配置,executions就是設定plugin的目標,

複製程式碼
<execution>
            <id>echodir</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>verify</phase>
            <inherited>false</inherited>
            <configuration>
              <tasks>
                <echo>Build Dir: ${project.build.directory}</echo>
              </tasks>
            </configuration>
          </execution> 
複製程式碼

id:識別符號

goals:裡面列出一系列的goals元素,例如上面的run goal

phase:宣告goals執行的時期,例如:verify

inherited:是否傳遞execution到子pom裡。

configuration:設定execution下列表的goals的設定,而不是plugin所有的goals的設定

pluginManagement配置:

pluginManagement的作用類似於denpendencyManagement,只是denpendencyManagement是用 於管理專案jar包依賴,pluginManagement是用於管理plugin。與pom build裡的plugins區別是,這裡的plugin是列出來,然後讓子pom來決定是否引用。

例如:

複製程式碼
<pluginManagement> 

      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.2</version>
          <executions>
            <execution>
              <id>pre-process-classes</id>
              <phase>compile</phase>
              <goals>
                <goal>jar</goal>
              </goals>
              <configuration>
                <classifier>pre-process</classifier>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement> 
複製程式碼

子pom引用方法: 
在pom的build裡的plugins引用:

 <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
      </plugin>
    </plugins> 

build裡的directories:

相關推薦

Maven--pom.xml 配置

pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。<project> <mod

Maven pom.xml 配置

什麼是pom?    pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。pom.xml 配置檔案&l

mavenpom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.

SSM框架配合Maven時,pom.xml配置

這篇部落格針對我這樣的小白。 一. pom.xml有什麼用?:  我們知道maven(什麼是maven請移步https://www.cnblogs.com/whgk/p/7112560.html) 可以給我們管理jar包和其他資源(jar包:別人寫好的輪子,我們負責呼叫)

Maven系列2--pom.xml 配置

<project xmlns="http://maven.apache.org/POM/4.0.0 "       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "       xsi:schemaLocat

maven專案中pom.xml配置大全

    <!-- 描述了資源的目標路徑。該路徑相對target/classes目錄(例如${project.build.outputDirectory})。舉個例 子,如果你想資源在特定的包裡(org.apache.maven.messages),你就必須該元素設定為org/apache/maven /

maven pom標籤配置

<modelVersion>4.0.0</modelVersion> <!--專案的全球唯一識別符號,通常使用全限定的包名區分該專案和其他專案。並且構建時生成的路徑也是由此生成, 如com.mycompany

Maven pom.xml檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.a

maven POM.xml 標籤

 pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。 <project xmlns="ht

maven POM.xml 標籤

<span style="padding:0px; margin:0px"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

maven中全域性配置檔案settings.xml及專案pom.xml完整版

maven中全域性配置檔案settings.xml及專案pom.xml的詳解   一、apache maven的簡介     Apache Maven,是一個軟體(特別是Java軟體)專案管理及自動構建工具,由Apache軟體基金會所提供。基於專案物件

maven中全域性配置檔案settings.xml及專案pom.xml3

(2)   properties 作用:對應profile的擴充套件屬性列表。 maven屬性和ant中的屬性一樣,可以用來存放一些值。這些值可以在pom.xml中的任何地方使用標記${X}來使用,這裡X是指屬性的名稱。屬性有五種不同的形式,並且都能在se

maven核心:pom.xml檔案

什麼是pom?     pom作為專案物件模型。通過xml表示maven專案,使用pom.xml來實現。主要描述了專案:包括配置檔案;開發者需要遵循的規則,缺陷管理系統,組織和licenses,專案的url,專案的依賴性,以及其他所有的專案相關因素。 快

史上最全的mavenpom.xml檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://m

maven中setting.xml配置

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

Maven基礎-預設中央倉庫[settings.xml 配置 ]

maven2 比起maven1 來說,需要配置的檔案少多了,主要集中在pom.xml和settings.xml中。     先來說說settings.xml,settings.xml對於maven來說相當於全域性性的配置,用於所有的專案。在maven2中存在兩個settings.xml,一個位於maven2的

Mavenpom.xml檔案

快速預覽 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

Maven基礎-預設中央倉庫[settings-xml-配置-]

Maven基礎-預設中央倉庫 當我們建立一個簡單的Maven專案後(只需要在pom.xml配置好依賴),執行mvn clean install就可以把專案構建好,不需要我們手工下載任何jar,這全靠中央倉庫的存在,它會自動從倉庫下載。這個倉庫的定義是在

maven之setting.xml 配置

檔案存放位置 全域性配置: ${M2_HOME}/conf/settings.xml 使用者配置: ${user.home}/.m2/settings.xml note:使用者配置優先於全域性配置。${user.home} 和和所有其他系統屬性只能在3.0+版本上

最全的mavenpom.xml檔案

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="h