<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/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>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>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>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中做如下配置:
这样孩子POM和parent POM中都存在groupId为my.group的plugin,Maven默认的行为将是根据属性名称将两个plugin的configuration的内容进行合并。如果孩子POM中有一个属性,则该属性是有效的,如果孩子POM中没有一个属性,但parent POM中存在,则parent中的属性是有效的。
根据这些规则,上面的例子在Maven中将得到:
通过在configuration元素中增加combine.children和combine.self属性,孩子POM可以控制Maven怎么合并plugin的configuration。
假定这儿是孩子POM的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><build>
    ...
    <plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-jar-plugin</artifactId>
		</plugin>
    </plugins>
    ...
</build>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>
	<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项目构建过程中的关键元素,包括默认目标、资源管理、插件配置及继承规则等内容,帮助读者理解Maven如何组织和执行构建任务。
本文详细介绍了Maven项目构建过程中的关键元素,包括默认目标、资源管理、插件配置及继承规则等内容,帮助读者理解Maven如何组织和执行构建任务。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   2736
					2736
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            