maven生命周期一例

在打包时,我想将一些配置文件打到包里面,但这些配置文件不是放在resource下面的,于是修改pom.xml, 增加


<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<executions>
					<execution>
						<id>copy-resources</id>
						<phase>package</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<encoding>UTF-8</encoding>
							<outputDirectory>${project.build.directory}/classes</outputDirectory>
							<resources>
								<resource>
									<directory>${basedir}</directory>
									<includes>
										<include>*.composite</include>
									</includes>
									<filtering>true</filtering>
								</resource>
							</resources>
						</configuration>
					</execution>
					<execution>
						<id>copy-resources2</id>
						<phase>package</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<encoding>UTF-8</encoding>
							<outputDirectory>${project.build.directory}/classes/META-INF</outputDirectory>
							<resources>
								<resource>
									<directory>META-INF</directory>
									<includes>
										<include>*.xml</include>
									</includes>
									<filtering>true</filtering>
								</resource>
							</resources>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<executions>
					<execution>
						<id>jar-classes</id>
						<phase>package</phase>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>


但是这个phase的执行在maven3.0和maven3.0.5及3.1.1下面的表现不一样

当我没有加这段配置的时候,执行顺序是下面这样的


[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ CEPBusinessRulesImpl ---
[WARNING] Using platform encoding (GB18030 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ CEPBusinessRulesImpl ---
[INFO] Compiling 5 source files to D:\workspace\RAD8\CEP-WDSIBE\branches\PAX2389\CEPBusiness\CEPBusinessRulesImpl\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ CEPBusinessRulesImpl ---
[WARNING] Using platform encoding (GB18030 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ CEPBusinessRulesImpl ---
[INFO] Compiling 1 source file to D:\workspace\RAD8\CEP-WDSIBE\branches\PAX2389\CEPBusiness\CEPBusinessRulesImpl\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.7.2:test (default-test) @ CEPBusinessRulesImpl ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ CEPBusinessRulesImpl ---
[INFO] Building jar: D:\workspace\RAD8\CEP-WDSIBE\branches\PAX2389\CEPBusiness\CEPBusinessRulesImpl\target\CEPBusinessRulesImpl-1.0.0.jar

[INFO]


当我增加了这段配置,在本地eclipse里面,安装的是maven3.0,执行顺序是这样的


[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ CEPBusinessRulesImpl ---
[WARNING] Using platform encoding (GB18030 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ CEPBusinessRulesImpl ---
[INFO] Compiling 5 source files to D:\workspace\RAD8\CEP-WDSIBE\branches\PAX2389\CEPBusiness\CEPBusinessRulesImpl\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ CEPBusinessRulesImpl ---
[WARNING] Using platform encoding (GB18030 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ CEPBusinessRulesImpl ---
[INFO] Compiling 1 source file to D:\workspace\RAD8\CEP-WDSIBE\branches\PAX2389\CEPBusiness\CEPBusinessRulesImpl\target\test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.7.2:test (default-test) @ CEPBusinessRulesImpl ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ CEPBusinessRulesImpl ---
[INFO] Building jar: D:\workspace\RAD8\CEP-WDSIBE\branches\PAX2389\CEPBusiness\CEPBusinessRulesImpl\target\CEPBusinessRulesImpl-1.0.0.jar

[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:copy-resources (copy-resources) @ CEPBusinessRulesImpl ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:copy-resources (copy-resources2) @ CEPBusinessRulesImpl ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 4 resources
[INFO] 
[INFO] --- maven-resources-plugin:2.4.3:copy-resources (copy-resources3) @ CEPBusinessRulesImpl ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-jar-plugin:2.3.1:jar (jar-classes) @ CEPBusinessRulesImpl ---
[INFO] Building jar: D:\workspace\RAD8\CEP-WDSIBE\branches\PAX2389\CEPBusiness\CEPBusinessRulesImpl\target\CEPBusinessRulesImpl-1.0.0.jar

[INFO] 


大家注意,这里我配置的phase都是package,也就是说copy resource是在package阶段做,jar也是在package阶段做,而 default-resources 是在process-resources阶段做的,
也就是说先执行默认的拷贝资源的动作,会拷贝资源文件夹下面的资源文件来target/classes下面,接着编译打包,接着再拷贝资源,再执行一次打包,所以最后的结果是正确的,只是执行了两次打包而已。


而我在jenkins里面,安装的是maven3.0.5,执行顺序是下面这样的


INFO: --- maven-clean-plugin:2.4.1:clean (default-clean) @ CEPCommonBusinessImpl ---
...
INFO: --- maven-resources-plugin:2.5:resources (default-resources) @ CEPCommonBusinessImpl ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
...
INFO: --- maven-compiler-plugin:2.3.2:compile (default-compile) @ CEPCommonBusinessImpl ---
...
INFO: --- maven-resources-plugin:2.5:testResources (default-testResources) @ CEPCommonBusinessImpl ---
[debug] execute contextualize
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
...
INFO: --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ CEPCommonBusinessImpl ---
[INFO] Compiling 3 source files to /root/.jenkins/workspace/CEP_IBE01_SIT_CEPBusiness/CEPCommonBusinessImpl/target/test-classes
...
INFO: --- maven-surefire-plugin:2.7.2:test (default-test) @ CEPCommonBusinessImpl ---
[INFO] Surefire report directory: /root/.jenkins/workspace/CEP_IBE01_SIT_CEPBusiness/CEPCommonBusinessImpl/target/surefire-reports


-------------------------------------------------------
 T E S T S
-------------------------------------------------------
...
INFO: --- maven-jar-plugin:2.3.2:jar (default-jar) @ CEPCommonBusinessImpl ---
[INFO] Building jar: /root/.jenkins/workspace/CEP_IBE01_SIT_CEPBusiness/CEPCommonBusinessImpl/target/CEPCommonBusinessImpl-1.0.0.jar

...
INFO: --- maven-resources-plugin:2.5:copy-resources (copy-resources) @ CEPCommonBusinessImpl ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
...
INFO: --- maven-resources-plugin:2.5:copy-resources (copy-resources2) @ CEPCommonBusinessImpl ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
...
INFO: --- maven-jar-plugin:2.3.2:jar (jar-classes) @ CEPCommonBusinessImpl ---
Jan 21, 2014 6:57:10 PM org.apache.maven.cli.event.ExecutionEventLogger mojoStarted
INFO: 
Jan 21, 2014 6:57:10 PM org.apache.maven.cli.event.ExecutionEventLogger mojoStarted
INFO: --- maven-install-plugin:2.3.1:install (default-install) @ CEPCommonBusinessImpl ---


大家仔细看会发现执行顺序是一样的,但是有一个问题就是第二次执行jar-classes这个jar命令的时候,没有打包,导致后面拷贝的资源都没有被打到包里面。


所以为了保险,最好是把copy-resource的phase设置为process-resources,这样保证是打包之前就可以将需要的资源拷贝到正确的目录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值