当另一个处于活动状态时自动激活配置文件

时间:2011-03-17 14:48:56

标签: java maven

我知道无法“链接”个人资料声明。 可以在命令行中使用系统属性(如mvn -Dvar = value)执行我想要(但不完全)的操作。 然后使用它:

  <activation>
    <property>
      <name>var</name>
      <value>value</value>
    </property>            
  </activation>

或使用-P profile1,profile2

同时激活多个配置文件

实际上我有4个配置文件,我想创建第五个配置文件,其中包含所有aspectj部分(插件,依赖项,...),只有在激活配置文件1,2或3时才应激活它们。就像我没有冗余的插件和依赖声明。

<profile>
  <id>profile1</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <build>
    ...     
  </build>
</profile>

<profile>
  <id>profile2</id>
  <build>
    ...     
  </build>
</profile>

<profile>
  <id>profile3</id>
  <build>
    ... 
  </build>
</profile>
<profile>
  <id>profile4</id>
  <build>
    <plugins>
      <plugin>
        ...
      </plugin>
    </plugins>
  </build>
</profile>

<profile>
  <id>aop</id>
  <build>
    <plugins>
      <plugin>
        ...
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      ...
    </dependency>
    <dependency>
      ...
    </dependency>
  </dependencies>
</profile>

问题是配置文件1是默认配置文件,甚至应该可以在没有命令行参数的情况下执行它。我尝试定义一个值,但它不起作用,因为激活属性仅适用于系统属性。

我错了吗?还有其他办法吗?

由于

1 个答案:

答案 0 :(得分:2)

Maven对您没有帮助,您可以在个人资料之间没有依赖关系或继承,另请参阅my recent answer to a related question

您可以明确打开或关闭配置文件,但无法定义它们之间的任何关系。 Maven不是蚂蚁,这通常是一件好事,但这是我认为它应该更像蚂蚁的情况之一。

来自Introduction to Build Profiles

  

可以触发/激活配置文件   在几个方面:

     
      
  • 显式
  •   
  • 通过Maven设置
  •   
  • 基于环境变量
  •   
  • 操作系统设置
  •   
  • 出现或丢失文件
  •   

这些都不能帮助定义配置文件之间的任何关系(因为在构建项目时评估配置文件,所以无法使用项目属性)。所以你唯一的选择是

  • 使用限制并使用-P语法
  • 明确激活您需要的配置文件
  • 编写一个封装maven调用的shell脚本,并自动添加缺少的配置文件
  • 按照my previous answer
  • 中的说明,为DefaultProfileSelector建立自己的替代品