在打包时,我想将一些配置文件打到包里面,但这些配置文件不是放在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,这样保证是打包之前就可以将需要的资源拷贝到正确的目录。maven生命周期一例
原文:http://blog.csdn.net/fireofjava/article/details/18657577