我有一个定义了 3 个配置文件的 pom。 我想要:
- 始终在所有其他配置文件之前运行“生成”配置文件(如果需要)
基于例如属性运行 dev/normal 配置文件 pom 片段:
<profiles> <profile> <id>generate-axis-stubs</id> <activation> <file> <missing>target/generated-sources</missing> </file> </activation> <build> <plugins> <plugin> <groupId>org.apache.axis2</groupId> <artifactId>axis2-wsdl2code-maven-plugin</artifactId> <configuration> <generateServerSide>true</generateServerSide> <generateServicesXml>true</generateServicesXml> <outputDirectory>target/generated-sources</outputDirectory> <packageName>${genclasses.package}</packageName> </configuration> <executions> <execution> <id>ESISGeneralSigningStatusUpdate_V1_0</id> <goals> <goal>wsdl2code</goal> </goals> <phase>generate-sources</phase> <configuration> <wsdlFile>${wsdl.src.dir}/ESISGeneralSigningStatusUpdate_V1_0.wsdl</wsdlFile> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>normal</id> <activation> <property> <name>!env</name> </property> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <excludes> <exclude>**/JdbcDataServiceImplTest.java</exclude> </excludes> </configuration> </plugin> </plugins> </build> </profile> <!-- This profile should be used to run tests that requires access to DB It is activated in case system variable env=dev --> <profile> <id>run-db-tests</id> <activation> <property> <name>env</name> <value>dev</value> </property> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Test.java</include> </includes> </configuration> </plugin> </plugins> </build> </profile>
问题是,在干净的编译中,它每第二次就会工作一次。 我启用了 -X 调试并比较了输出。 - 是失败的,+ 是有效的。
@@ -1551,6 +1551,10 @@
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes,
generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package,
package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
+[DEBUG] Using mirror nexus (http://nexus.edb.com/nexus/content/groups/public/) for apache.snapshots (http://repository.apache.org/snapshots).
+[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
+[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
+[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
[DEBUG] Lifecycle default -> [validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
[DEBUG] Lifecycle clean -> [pre-clean, clean, post-clean]
[DEBUG] Lifecycle site -> [pre-site, site, post-site, site-deploy]
@@ -1563,7 +1567,7 @@
[DEBUG] === PROJECT BUILD PLAN ================================================
[DEBUG] Project: com.edb.esign:gssWsServer:2.3-SNAPSHOT
[DEBUG] Dependencies (collect): []
-[DEBUG] Dependencies (resolve): [compile]
+[DEBUG] Dependencies (resolve): [compile, test]
[DEBUG] Repositories (dependencies): [nexus (http://nexus.edb.com/nexus/content/groups/public/, releases+snapshots)]
[DEBUG] Repositories (plugins) : [nexus (http://nexus.edb.com/nexus/content/groups/public/, releases+snapshots)]
[DEBUG] -----------------------------------------------------------------------
当我运行 help:active-profile 时
成功后显示: 以下配置文件处于 Activity 状态:
- 正常(来源:pom)
- nexus(来源:settings.xml)
失败后显示: 以下配置文件处于 Activity 状态:
- 生成轴 stub (来源:pom)
- 正常(来源:pom)
- nexus(来源:settings.xml)
如果我手动清理它然后编译 - 它始终有效。但为什么它并不总是适用于干净编译呢? 谢谢!
最佳答案
因为配置文件只被评估一次。所以问题不在于干净编译
,而在于启动Maven时文件夹target/generated-sources
是否存在。
如果存在,clean 编译
必须失败,因为 clean 会删除该文件夹,但 Maven 不再关心。
关于java - maven:pom中多个配置文件的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272859/