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

时间:2014-09-15 22:01:38

标签: maven maven-2 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>

在Maven输出中:

OS name: "mac os x", version: "10.9.4", arch: "x86_64", family: "mac"

但是,Maven将rpmPhase设置为&#34; package,&#34;而不是&#34;无,&#34;这不是预期的行为。

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

编辑:

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

2 个答案:

答案 0 :(得分:5)

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

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

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

<os>
  <family>unix</family>
  <name>!mac os x</name>
</os>

答案 1 :(得分:1)

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