【问题标题】:Maven: property to activate profile in sub-modulesMaven:在子模块中激活配置文件的属性
【发布时间】:2014-05-06 10:45:51
【问题描述】:

我们有一个多模块 maven 项目,它有不同的平台可以运行,比如 JBoss 4 和 JBoss 7。我们指定 platform 属性,然后将其用作工件的分类器,并用于激活子模块中特定于平台的配置文件,例如:

<activation>
    <property>
        <name>platform</name>
        <value>jboss71x</value>
    </property>
</activation>

在这些配置文件中,除其他外,我们指定了所提供依赖项的版本。 例如。我们导入 jboss 父 pom:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.as</groupId>
            <artifactId>jboss-as-parent</artifactId>
            <version>${dependencies.jbossas7.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

因此,当我们将属性指定为命令行参数 (-Dplatform=jboss71x) 时,它可以正常工作。

但是当属性在根 pom.xml 中的&lt;properties&gt; 部分设置时(我也尝试在父 pom 中设置它),看起来父 pom 的版本被遗漏了:

[ERROR]     'dependencies.dependency.version' for commons-lang:commons-lang:jar is missing. @ line 46, column 21
[ERROR]     'dependencies.dependency.version' for commons-beanutils:commons-beanutils:jar is missing. @ line 56, column 21
[ERROR]     'dependencies.dependency.version' for commons-collections:commons-collections:jar is missing. @ line 61, column 21

maven 版本最新:3.2.1。

为什么会发生这种情况,我们如何在 pom.xml 中指定这个属性值,而不是在命令行中?

【问题讨论】:

    标签: maven maven-profiles


    【解决方案1】:

    唉,做你想做的事是不可能的。在 Codehaus 网站上找到 this note 之前,我花了几个小时尝试同样的事情:

    请注意,只有在 Maven 命令行上设置的属性才能激活配置文件。在 POM、父 POM 或其他配置文件中设置的属性无效。

    基本上,配置文件激活发生在 POM 处理的早期,在所有属性被插值之前。本质上,这意味着激活配置文件的属性必须在构建开始时具有定义的值 - 作为系统属性,因此在命令行上 - 因为配置文件激活发生在 Maven 处理任何 &lt;properties&gt; 元素之前。有一个类似 StackOverflow 问题的 answer 提供了更多详细信息和背景文档。

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 2010-12-03
      • 1970-01-01
      • 2011-06-14
      • 2011-04-01
      • 2013-08-30
      • 2011-11-11
      • 2011-07-22
      • 2017-10-11
      相关资源
      最近更新 更多