我正在尝试使用pom.xml
:
<project>
[...]
<properties>
<run.it>true</run.it>
</properties>
[...]
<profiles>
<profile>
<activation>
<property><name>run.it</name></property>
</activation>
[...]
</profile>
</profiles>
[...]
</project>
显然它不起作用。但是,激活可以从命令行进行:
mvn -Drun.it
是“按设计”吗?如果是,那么可能的解决方法是什么?
答案 0 :(得分:25)
编辑,完成重写,因为我现在理解了这个问题。
请参阅this forum post:
配置文件激活基于 SYSTEM 属性。 您无法根据您的pom中定义的属性激活配置文件 您无法根据之后定义的系统属性激活配置文件 构建计划已开始执行
答案 1 :(得分:6)
如何使用此类激活
<profile>
<id>gwt</id>
<activation>
<file>
<exists>uses-gwt.marker</exists>
</file>
</activation>
并将文件'uses-gwt.marker'添加到源代码管理中,紧挨着pom.xml。这为所有开发人员提供了相同的状态,允许面向方面的pom。我们在父pom中使用这种技术,并将hte标记文件放在childs svn中。不理想,但有效。
答案 2 :(得分:1)
在最新的Maven版本(3.5+?)中,您可以在项目的根目录中创建一个.mvn
文件夹,并在文件.mvn/maven.config
中创建一个文件。然后,您可以像在命令行中一样在此文件中激活配置文件或设置属性。
-Dactivate.myprofile=true
直接激活个人资料
-Pmyprofile
希望maven5将获得对Mixins的支持,这可能会使构建设置更可重用。
答案 3 :(得分:0)
现在它应该可以工作了。您可以覆盖pom.xml中的“ run.it”属性,并将其用于配置文件激活。
我不确定这是错误还是功能。
答案 4 :(得分:-1)
如前面的答案中所述,配置文件激活仅适用于系统属性。
但是,通过一些创造力,您可以使用pom属性实现类似的结果(条件插件执行)。要实现这一点,请使用要有条件执行的插件的阶段标记:
<project>
...
<properties>
<run.it>none</run.it>
<!-- <run.it>compile</run.it> -->
<!-- <run.it>package</run.it> -->
</properties>
...
<build>
...
<plugins>
<plugin>
<artifactId>your-plugin</artifactId>
<executions>
<execution>
<phase>${run.it}</phase>
</execution>
</executions>
</plugin>
</plugins>
...
</build>
</project>
唯一的区别是您必须使用阶段名称而不是true / false。但您可以更改属性或作为属性自由覆盖它。
答案 5 :(得分:-2)
正如Moritz Heuser所解释的,配置文件激活基于系统属性。但是,您可以尝试类似的东西:
<project>
...
<properties>
<run.it>true</run.it>
</properties>
...
<profiles>
<profile>
<activation>
<activeByDefault>${run.it}</activeByDefault>
</activation>
...
</profile>
</profiles>
...
</project>
我们的想法是在activeByDefault
中定义<properties>
标志。
答案 6 :(得分:-3)
我认为你的问题与此类似。
Activation of maven profile based on multiple properties
如上所述,您可以根据需要激活配置文件并设置各种属性,并使用命令mvn -Prun-it
将属性设置为true。
<project>
[...]
[...]
<profiles>
<profile>
<id>don't-run</id>
<properties>
<run.it>false</run.it>
</properties>
[...]
</profile>
<profile>
<id>run-it</id>
<properties>
<run.it>true</run.it>
</properties>
[...]
</profile>
</profiles>
[...]
</project>