Maven的pom.xml文件详解------Build Settings
轉載自??Maven的pom.xml文件詳解------Build Settings
根據POM 4.0.0 XSD,build元素概念性的劃分為兩個部分:BaseBuild(包含poject build和profile build的公共部分,見下)和poject build包含的一些高級特性。?
<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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">...<!-- "Project Build" contains more elements than just the BaseBuild set --><build>...</build><profiles><profile><!-- "Profile Build" contains a subset of "Project Build"s elements --><build>...</build></profile></profiles> </project>?
BaseBuild元素集合
basic elements
<build><defaultGoal>install</defaultGoal><directory>${basedir}/target</directory><finalName>${artifactId}-${version}</finalName><filters><filter>filters/filter1.properties</filter></filters>... </build>1、defaultGoal:執行build任務時,如果沒有指定目標,將使用的默認值,如:在命令行中執行mvn,則相當于執行mvn install;?
2、directory:build目標文件的存放目錄,默認在${basedir}/target目錄;?
3、finalName:build目標文件的文件名,默認情況下為${artifactId}-${version};?
4、filter:定義*.properties文件,包含一個properties列表,該列表會應用的支持filter的resources中。也就是說,定義在filter的文件中的"name=value"值對會在build時代替${name}值應用到resources中。Maven的默認filter文件夾是${basedir}/src/main/filters/。
?
resources
build的另一個特征是指定你的項目中resources的位置。resources(通常)不是代碼,他們不被編譯,但是被綁定在你的項目或者用于其它什么原因,例如代碼生成。
<build>...<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></resources><testResources>...</testResources>... </build>1、resources:一個resource元素的列表,每一個都描述與項目關聯的文件是什么和在哪里;?
2、targetPath:指定build后的resource存放的文件夾。該路徑默認是basedir。通常被打包在JAR中的resources的目標路徑為META-INF;?
3、filtering:true/false,表示為這個resource,filter是否激活。?
4、directory:定義resource所在的文件夾,默認為${basedir}/src/main/resources;?
5、includes:指定作為resource的文件的匹配模式,用*作為通配符;?
6、excludes:指定哪些文件被忽略,如果一個文件同時符合includes和excludes,則excludes生效;?
7、testResources:定義和resource類似,但只在test時使用,默認的test resource文件夾路徑是${basedir}/src/test/resources,test resource不被部署。?
?
Plugins
<build>...<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></plugins> </build>?除了groupId:artifactId:version標準坐標,plugin還需要如下屬性:?
1、extensions:true/false,是否加載plugin的extensions,默認為false;?
2、inherited:true/false,這個plugin是否應用到該POM的孩子POM,默認true;?
3、configuration:配置該plugin期望得到的properies,如上面的例子,我們為maven-jar-plugin的Mojo設置了classifier屬性;?
如果你的POM有一個parent,它可以從parent的build/plugins或者pluginManagement集成plugin配置。
為了闡述繼承后的關系,考慮如果parent POM中存在如下plugin:
<plugin><groupId>my.group</groupId><artifactId>my-plugin</artifactId><configuration><items><item>parent-1</item><item>parent-2</item></items><properties><parentKey>parent</parentKey></properties></configuration> </plugin>?然后在繼承的孩子POM中做如下配置:
<plugin><groupId>my.group</groupId><artifactId>my-plugin</artifactId><configuration><items><item>child-1</item></items><properties><childKey>child</childKey></properties></configuration> </plugin>這樣孩子POM和parent POM中都存在groupId為my.group的plugin,Maven默認的行為將是根據屬性名稱將兩個plugin的configuration的內容進行合并。如果孩子POM中有一個屬性,則該屬性是有效的,如果孩子POM中沒有一個屬性,但parent POM中存在,則parent中的屬性是有效的。
根據這些規則,上面的例子在Maven中將得到:
<plugin><groupId>my.group</groupId><artifactId>my-plugin</artifactId><configuration><items><item>child-1</item></items><properties><childKey>child</childKey><parentKey>parent</parentKey></properties></configuration> </plugin>通過在configuration元素中增加combine.children和combine.self屬性,孩子POM可以控制Maven怎么合并plugin的configuration。
假定這兒是孩子POM的configuration:
<configuration><items combine.children="append"><!-- combine.children="merge" is the default --><item>child-1</item></items><properties combine.self="override"><!-- combine.self="merge" is the default --><childKey>child</childKey></properties> </configuration>則,現在合并后的效果如下:
<configuration><items combine.children="append"><item>parent-1</item><item>parent-2</item><item>child-1</item></items><properties combine.self="override"><childKey>child</childKey></properties> </configuration>combine.children="append"表示父POM和子POM的屬性合并起來;
combine.self="override"表示子POM的屬性完全覆蓋父POM的。
4、dependencies:同base build中的dependencies有同樣的結構和功能,但這里是作為plugin的依賴,而不是項目的依賴。
5、executions:plugin可以有多個目標,每一個目標都可以有一個分開的配置,甚至可以綁定一個plugin的目標到一個不同的階段。executions配置一個plugin的目標的execution。
假定一項綁定antrun:run目標到verify階段,我們希望任務響應build文件夾,同時避免傳遞配置到他的孩子POM。你將得到一個execution:
<build><plugins><plugin><artifactId>maven-antrun-plugin</artifactId><version>1.1</version><executions><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></executions></plugin></plugins> </build>id:標識,用于和其他execution區分。當這個階段執行時,它將以這個形式展示:[plugin:goal execution: id]。在這里為: [antrun:run execution: echodir];
goals:一個plugin的execution的目標列表;
phase:目標執行的階段,具體值看Maven的生命周期列表;
inherited:是否繼承;
configuration:在指定的目標下的配置。
Plugin Management
pluginManagement的元素的配置和plugins的配置是一樣的,只是這里的配置只是用于集成,在孩子POM中指定使用。例如,在父POM中做如下配置:
<build>...<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>... </build>則在孩子POM中,我們只需要配置:?
<build>...<plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId></plugin></plugins>... </build>這樣就可以大大的簡化孩子POM中的配置。?
?
Reporting
Reporting包含的屬性對應到site階段(見Maven生命周期)。特定的Maven插件能產生定義和配置在reporting元素下的報告,例如:產生Javadoc報告。
<reporting><outputDirectory>${basedir}/target/site</outputDirectory><plugins><plugin><artifactId>maven-project-info-reports-plugin</artifactId><version>2.0.1</version><reportSets><reportSet></reportSet></reportSets></plugin></plugins> </reporting>對于reportSets:?
<reportSets><reportSet><id>sunlink</id><reports><report>javadoc</report></reports><inherited>true</inherited><configuration><links><link>http://java.sun.com/j2se/1.5.0/docs/api/</link></links></configuration></reportSet> </reportSets>?
總結
以上是生活随笔為你收集整理的Maven的pom.xml文件详解------Build Settings的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信对方通过雷达添加是什么意思
- 下一篇: Maven的pom.xml文件详解---