【问题标题】:maven -> profile -> activation - all conditions are required or just one?maven -> 配置文件 -> 激活 - 所有条件都是必需的还是只有一个?
【发布时间】:2013-12-18 13:35:44
【问题描述】:

配置:
- 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-1profile-2

配置文件 profile-1 应在满足两个要求时处于活动状态:
- jdk 是 1.6 版
- 属性 name 具有值 Hubert

问题:

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

mvn -Dname=Hubert help:active-profiles

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

有人能解释一下为什么会这样吗?这是正常行为吗?
谢谢。

【问题讨论】:

    标签: java maven maven-3


    【解决方案1】:

    这里的问题是带有您的触发条件的激活列表与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>
    

    【讨论】:

    【解决方案2】:

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

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

    在满足所有激活条件时激活配置文件。

    这不是真的。事实是,一个条件足以激活配置文件,这当然等于 OR 逻辑条件。此行为在Maven docs 中进行了描述:

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

    这对我来说既不直观也不非常有用。但这就是 maven 在撰写本文时的工作方式。

    有一张票 MNG-4565 用于 AND 连接。这被标记为 Bug,但根据 Maven 文档,它不是,所以这张票已经开了将近 4 年。 最有用的部分是 Ronny Pscheidl 对这张票的最后评论。他的评论指向这个来源:and-activation-profile-selector。这会将默认的 Maven OR 条件更改为 AND 条件。经测试。作品。但当然,如果您决定使用它,您还有一件事要记住。

    【讨论】:

    • MNG-4565 已在 3.2.2 中修复。
    猜你喜欢
    • 2011-06-05
    • 2014-10-29
    • 2013-10-02
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多