Maven - 根据项目属性激活配置文件

时间:2013-09-19 08:19:03

标签: java maven pom.xml

您好我正在努力实现这样的目标:

在父母pom中,我有

<profile>
  <activation>
    <property>
      <name>Compile</name>
      <value>${project.artifactId}</value>
    ...

因此,如果我在父pom下运行mvn -DCompile=mod1 install,它只会将配置文件设置应用于模块1,而不应用于其他模块。

同样,如果我有

<profile>
  <activation>
    <property>
      <name>Compile</name>
      <value>${project.packaging}</value>
    ...

然后在父pom下运行mvn -DCompile=war install,它只会将配置文件设置应用于那些要打包为战争而不是jar或pom的设置。

我试过但它没有按预期工作。我错过了什么吗?请帮忙。

P.S。没有必要建议解决方法,因为我只对这种方法感兴趣。如果是这样的话,简单地回答它是不可能有理由的。谢谢

3 个答案:

答案 0 :(得分:9)

自......以后它无效。

首先:

为什么它不会从父母到孩子们工作:

  • 父POM中的属性会在您的孩子POM出现之前展开。

许多人在你面前失败了。

有人可能想知道你真正想要做什么。您是否在同一源项目中构建不同的工件?也许你还需要一些Maven模块来处理事情。

答案 1 :(得分:5)

是的,您可以根据env变量等一个或多个参数激活配置文件。

<project>
    ...
    <profiles>
        <profile>
            <id>development</id>
            <activation>
                <property>
                    <name>!environment.type</name>
                </property>
            </activation>
        </profile>
    </profiles>
</project>

如果您尝试使用不同的包装取决于X,那么您可以使用组装插件并在那里发挥你的魔力 http://maven.apache.org/plugins/maven-assembly-plugin/

有关激活属性的更多信息

答案 2 :(得分:1)

  

从Maven 3.0开始,POM中的配置文件也可以基于激活   来自settings.xml的活动配置文件中的属性。

您可以查看此处给出的示例:

http://maven.apache.org/guides/introduction/introduction-to-profiles.html