maven - >个人资料 - >激活 - 所有条件都是必需的或只需一个?

时间:2013-12-18 13:35:44

标签: java maven maven-3

配置:
- Maven: 3.0.5
- Java: 1.6.0_45

说明

假设我们有如下配置文件配置:

<profiles>
    <profile>
        <id>profile-1</id>
        <activation>
            <jdk>1.6</jdk>
            <property>
                <name>name</name>
                <value>Hubert</value>
            </property>
        </activation>
    </profile>
    <profile>
        <id>profile-2</id>
        <activation>
            <jdk>1.6</jdk>
            <property>
                <name>name</name>
                <value>Wiktoria</value>
            </property>
        </activation>
    </profile>
</profiles>

我们有两个配置文件: profile-1 profile-2

配置文件 profile-1 应在满足两个要求时处于活动状态:
     - jdk是版本1.6
     - property name 的值为 Hubert

问题:

让我们检查一下这个配置:

mvn -Dname = Hubert help:active-profiles

因此,我得到两个有效的配置文件: profile-1 profile-2
嗯...
配置文件 profile-2 不应处于活动状态,因为属性 name 的值与预期的 Wiktoria 不同。

有人可以解释一下为什么这样的工作会这样吗?这是正常的行为吗? 感谢。

2 个答案:

答案 0 :(得分:6)

此处的问题是具有触发条件的激活列表与OR相关联。他们确实有provide multiple activation triggers的票,但它仍然是开放的。 这意味着,它匹配您的sdk规则,该规则是真的,因此是活动的。

<profile>
    <id>profile-1</id>
    <activation> <!-- true || true = true -->
        <jdk>1.6</jdk> <!-- true -->
        <property> <!-- true -->
            <name>name</name>
            <value>Hubert</value>
        </property>
    </activation>
</profile>
<profile>
    <id>profile-2</id>
    <activation> <!-- true || false = true -->
        <jdk>1.6</jdk> <!-- true -->
        <property> <!-- false -->
            <name>name</name>
            <value>Wiktoria</value>
        </property>
    </activation>
</profile>

答案 1 :(得分:2)

注意:这只是Chasmo正确答案的补充。

有一本描述Maven的sonatype的书。在Sonatype book (section 5.3.1)部分,我们可以找到:

  

当满足所有激活条件时,将激活配置文件。

事实并非如此。事实是,一个条件是激活配置文件,这当然等于OR逻辑条件。 Maven docs

中描述了此行为
  

当满足一个或多个指定条件时发生激活。遇到第一个肯定结果时,处理停止并且配置文件被标记为活动。

这对我来说既不是 intiutive 也不是非常有用的。但那就是maven在写这篇文章时的作用。

AND连词有一张票MNG-4565。这被标记为Bug,但根据Maven doc,它不是,所以这张票已经开了差不多4年了。 最有用的部分是 Ronny Pscheidl 撰写的此票证的最后评论。他的评论指出了这个来源:and-activation-profile-selector。这会将默认的maven OR条件更改为AND条件。测试。作品。但是当然如果你决定使用它,你还有一件事需要记住。