2011-09-08 90 views
11

我有两个Maven配置文件profile-A和profile-B。只有当“A”未被激活时才应激活“B”。 所以,如果我会打电话Maven:只有激活配置文件A,如果配置文件B未被激活?

mvn install 

轮廓-B执行(但不是个人资料-A)。 但是,如果我会打电话

mvn install -Pprofile-A 

然后只执行轮廓-A(但不是个人资料-B)。

任何提示我需要如何写我的pom.xml来实现这一点?

我已经尝试过这一点,但它不工作:

<profiles> 
    <profile> 
    <id>profile-A</id> 
    <activation> 
     <activeByDefault>false</activeByDefault> 
    </activation> 
    ... 
    </profile> 

    <profile> 
    <id>profile-B</id> 
    <activation> 
     <activeByDefault>true</activeByDefault> 
     <property> 
     <name>!profile-A</name> 
     </property>  
     ... 
    </activation> 
    ... 
    </profile> 
</profiles> 

回答

8

我想你的示例命令行按预期方式工作,所有你需要的是<activeByDefault>true</activeByDefault>的轮廓B.

http://maven.apache.org/guides/introduction/introduction-to-profiles.html状态:

当在命令行中激活POM中的配置文件或通过其激活控制时,默认情况下处于活动状态的所有配置文件都将自动停用图。

+0

只是想澄清一个难倒我约15分钟的观点。从上面关于'activeByDefault'的链接的最新版本(强调我的):“除非在同一个POM中的另一个配置文件**被使用前面描述的方法之一激活,否则该配置文件将自动为所有构建激活。”在我的情况下,我已经将父级配置文件B添加到父级POM中,并将配置文件A添加到多模块版本中的叶子POM中。在此配置中,当通过命令行激活配置文件A时,配置文件B未被禁用。将配置文件A和B移动到相同的POM中会产生所需的行为。 –

相关问题