我正在尝试建立一个.pom
文件,如果forkCount
为0,它将使用一个插件,否则使用另一个插件。此外,我希望0为默认值。换句话说,我想要mvn run_tests
和mvn -DforkCount=0 run_tests
都使用插件“ A”,其中mvn run_tests -DforkCount=5
将使用插件“ B”。
我有一个.pom文件,其中包含以下部分:
<project ...>
...
<properties>
<forkCount>0</forkCount>
</properties>
...
<profiles>
<profile>
<!-- if forkCount==0, don't invoke any of the parallel execution configuration -->
<id>no-parallel-execution</id>
<activation>
<property>
<name>forkCount</name>
<value>0</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<! --- nothing in here references forkCount -->
</plugin>
</plugins>
</build>
</profile>
<profile>
<profile>
<!-- forkCount!=0, use the parallel execution configuration -->
<id>parallel-execution</id>
<activation>
<property>
<name>forkCount</name>
<value>!0</value>
</property>
</activation>
<build>
<plugins>
<plugin>
...
<configuration>
...
<forkCount>${forkCount}</forkCount>
...
</configuration>
</plugin>
</plugins>
</build>
...
上面仅包含对
forkCount
的引用。如果我在命令行上为
forkCount
传递了一个值,一切都会按预期进行(即,当forkCount
为0时使用插件“ A”;否则使用插件“ B”)。但是,如果我运行mvn run_tests
,则即使${forkCount}
的值为0,插件“ B”也会被激活。这是怎么回事?物有所值:
>mvn -DforkCount=0 clean verify help:active-profiles
The following profiles are active:
- no-parallel-execution (source: ....
>mvn clean verify help:active-profiles
The following profiles are active:
- parallel-execution (source: ....
最佳答案
尝试
mvn -DforkCount=0 help:active-profiles
验证您确实要激活的配置文件是否处于活动状态(而您确实不希望激活的配置文件则未激活)。
-更新答案以容纳新信息-
感谢您对答案的更新,现在看来问题已经很明显了。
我认为问题在于“”不是“ 0”。基于这种理解,这意味着“!0”将在''或丢失的
forkCount
值上激活。我的测试证实了这种解释。
也许您可以使用更多配置文件重做此操作。一种用于检测未设置属性的条件,另一种用于检测属性为零的条件。这两个配置文件都可能会留下工件,例如$ target目录中的触摸文件。然后,您可能会使用此文件来知道您正在执行单线程调用,而没有该文件则是进行多线程调用。
用于确认这些想法的代码
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>edwinbuck.com</groupId>
<artifactId>example-properties</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<profiles>
<profile>
<id>unspecified-forkCount</id>
<activation>
<property>
<name>!forkCount</name>
</property>
</activation>
</profile>
<profile>
<id>zero-forkCount</id>
<activation>
<property>
<name>forkCount</name>
<value>0</value>
</property>
</activation>
</profile>
<profile>
<id>parallel-execution</id>
<activation>
<property>
<name>forkCount</name>
<value>!0</value>
</property>
</activation>
</profile>
</profiles>
</project>
用于确认这些想法的命令行调用
mvn help:active-profiles
mvn -DforkCount=0 help:active-profiles
mvn -DforkCount=3 help:active-profiles
结果
profiles: unspecified-forkCount parallel-execution
profiles: zero-forkCount
profiles: parallel-execution