在maven中定义条件概要文件时,混淆了顺序的重要性



我有一个可配置的属性line.end,我在项目构建的组装阶段使用它来指定应用程序属性文件的行结束类型。为此,我创建了两个配置文件LF_DOSLF_UNIX,这样当我启动时:

mvn install 

mvn install -P LF_DOS

行。结束等于"dos",当我启动时:

mvn install -P LF_UNIX

行。结束等于'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,这总是给我行.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>

这正是我想要的。

我的问题是:这是一个bug吗?或者,这是关于maven概要文件的一些信息吗?在这种情况下,这种限制使概要文件的顺序声明特别重要?

困惑在于您对概要文件激活工作原理的理解。

你认为这个:

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

意味着如果我没有名为"line.ending"的maven属性集,请激活此配置文件。如果我没有在命令行中指定-Dline.ending=X,激活这个配置文件的真正含义是什么。所以除非你运行这样的程序:

mvn clean install -Dline.ending=unix

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

最新更新