Maven:用于激活子模块中的配置文件的属性

时间:2014-05-06 10:45:52

标签: maven maven-profiles

我们有一个多模块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中的<properties>部分设置属性时(我也尝试在父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中指定此属性值,而不是在命令行中?

1 个答案:

答案 0 :(得分:10)

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

  

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

基本上,在插入所有属性之前,在POM处理中很早就会发生配置文件激活。本质上,这意味着激活配置文件的属性必须在构建的最开始时具有定义的值 - 作为系统属性,因此在命令行上 - 因为在Maven处理任何<properties>元素之前发生配置文件激活。对于类似的StackOverflow问题有一个answer,它提供了更多详细信息和后台文档。