11

嗨,我正在尝试实现这样的目标:

在父 pom 中,我有

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

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

同样,如果我有

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

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

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

PS无需建议解决方法,因为我只对这种方法感兴趣。简单地回答这是不可能的,如果是这样的话。谢谢

4

3 回答 3

17

它不会工作,因为...

首先:

以及为什么它不能从父母到孩子:

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

许多人在你之前来到这里并失败了。

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

于 2013-09-19T08:31:13.667 回答
10

是的,您可以根据变量等一种或多种参数激活配置文件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/

更多关于激活属性

于 2013-09-19T08:50:23.380 回答
2

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

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

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

于 2014-02-19T06:48:11.617 回答