2

我有一个可配置的属性line.ending,我在项目构建的组装阶段使用它来指定我的应用程序属性文件的行尾类型。为此,我创建了两个配置文件LF_DOSLF_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>

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

    <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 配置文件,一种使配置文件订单声明在这种情况下特别重要的限制?

4

1 回答 1

1

困惑在于您对配置文件激活如何工作的理解。

你认为这是:

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

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

mvn clean install -Dline.ending=unix

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

于 2012-02-24T02:00:19.843 回答