如何通过maven属性激活配置文件?

时间:2011-04-15 11:47:55

标签: java maven-2 maven

我正在尝试使用pom.xml

中定义的属性激活maven配置文件
<project>
  [...]
  <properties>
    <run.it>true</run.it>
  </properties>
  [...]
  <profiles>
    <profile>
      <activation>
        <property><name>run.it</name></property>
      </activation>
      [...]
    </profile>
  </profiles>
  [...]
</project>

显然它不起作用。但是,激活可以从命令行进行:

mvn -Drun.it

是“按设计”吗?如果是,那么可能的解决方法是什么?

7 个答案:

答案 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)

  • 在您的项目根目录中添加目录“ .mvn”。
  • 添加文件“ .mvn / jvm.config”
  • 将“ -Drun.it = false”插入jvm.config。

现在它应该可以工作了。您可以覆盖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>