为什么Maven没有使用预期的配置文件?

J E*_*lis 5 maven-2 maven maven-profiles rpm-maven-plugin

我正在使用Maven构建一些项目,它使用gMaven插件来构建包含主要工件的RPM.我只希望Maven尝试在具有rpmbuild的系统上构建RPM,而不是在没有的系统上构建RPM,因此我构建了两个独立的配置文件,一个应该是默认的,一个应该在Unix系列上激活OS.

我可以发誓,我测试了它,一切正常,但现在它运行Unix系列配置文件,即使我在OSX上构建.但是,如果我将配置文件的OS系列更改为"windows",它肯定知道它不在Windows机器上,因此运行默认配置文件.

这是我的pom.xml文件的相关部分:

<profiles>
    <profile>
        <id>default-profile</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <rpmPhase>none</rpmPhase>
        </properties>
    </profile>
    <profile>
        <id>rpm-profile</id>
        <activation>
            <os>
                <family>unix</family>
            </os>
        </activation>
        <properties>
            <rpmPhase>package</rpmPhase>
        </properties>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

在Maven输出中:

OS name: "mac os x", version: "10.9.4", arch: "x86_64", family: "mac"
Run Code Online (Sandbox Code Playgroud)

但是,Maven将rpmPhase设置为"package"而不是"none",这不是预期的行为.

任何人都可以看到我在这里遗失了什么吗?

编辑:

此外,如果我将OS系列设置为不存在的东西,或者我完全注释掉激活块,则使用默认配置文件,因此Maven似乎正在积极地将我的OSX与Unix系列操作系统匹配.

Rin*_*ing 5

我有同样的问题,这是一个解释问题的JIRA问题:

https://jira.codehaus.org/browse/MNG-4983

他们说它实际上不是一个bug.如果您需要OSX和Unix分开,这是一个解决方法:

<os>
  <family>unix</family>
  <name>!mac os x</name>
</os>
Run Code Online (Sandbox Code Playgroud)


J E*_*lis 1

因此,环顾四周后,似乎 OSX 与 Maven 下的“Unix family”相匹配。显然,该检查会将任何以“x”结尾的操作系统标记为 Unix 系列,这似乎是一种愚蠢的方法。不幸的是,您似乎无法执行任何 AND 或 OR 运算符,因此您必须选择一个系列,并且只能选择一个系列。因此,我将 unix 更改为 !mac 以至少避免 OSX 下的问题。当然,如果构建在 Windows 上运行,它仍然会突然出现。