配置:
- 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 不同。
有人可以解释一下为什么这样的工作会这样吗?这是正常的行为吗? 感谢。
答案 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条件。测试。作品。但是当然如果你决定使用它,你还有一件事需要记住。