在maven中定义条件配置文件时,混淆了该顺序

时间:2012-02-23 13:46:10

标签: maven maven-3 profiles

我有一个可配置的属性 line.ending ,我在项目构建的汇编阶段使用它来指定我的应用程序属性文件的行结束类型。为此,我创建了两个配置文件 LF_DOS LF_UNIX ,以便在我启动时:

mvn install 

mvn install -P LF_DOS

line.ending 等于'dos',当我启动时:

mvn install -P LF_UNIX

line.ending 等于'unix'。

我第一次尝试这样做只是:

    <profile>
        <id>LF_UNIX</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <line.ending>unix</line.ending>
        </properties>
    </profile>
    <profile>
        <id>LF_DOS</id>
        <activation>
            <property>
                <name>!line.ending</name>
            </property>
        </activation>
        <properties>
            <line.ending>dos</line.ending>
        </properties>
    </profile>

不幸的是,这总是给我 line.ending = dos ,无论LF_UNIX是否设置。奇怪......但是,对我来说更令人困惑的是,我只是通过更改配置文件声明顺序来解决问题,如下所示:

    <profile>
        <id>LF_DOS</id>
        <activation>
            <property>
                <name>!line.ending</name>
            </property>
        </activation>
        <properties>
            <line.ending>dos</line.ending>
        </properties>
    </profile>
    <profile>
        <id>LF_UNIX</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <line.ending>unix</line.ending>
        </properties>
    </profile>

这完全符合我的要求。

我的问题是:这是一个错误吗?或者是否了解maven配置文件,这种限制使得配置文件订单声明在这种情况下特别重要?

1 个答案:

答案 0 :(得分:1)

混淆在于您了解配置文件激活的工作原理。

你认为这个:

<activation>
  <property>
    <name>!line.ending</name>
  </property>
</activation>

表示如果我没有名为“line.ending”的maven属性,请激活此配置文件。如果我没有在命令行上指定-Dline.ending = X,它实际意味着什么,激活此配置文件。所以除非你运行这样的东西:

mvn clean install -Dline.ending=unix

您正在激活此配置文件,因此将值设置为dos。