当一个配置文件被激活时,自动激活另一个配置文件。

3

我知道无法“链式”声明配置文件。 可以通过命令行中的系统属性(例如 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
相关:https://dev59.com/Wm435IYBdhLWcg3woRjG - Sean Patrick Floyd
1个回答

2
Maven在这方面无法帮助您,您可以没有任何依赖或配置文件之间的继承关系,有关详细信息请参见我最近回答相关问题的答案。您可以明确地打开或关闭配置文件,但是无法定义它们之间的任何关系。 Maven不是Ant,这通常是一件好事,但这是我认为它应该更像Ant的情况之一。从 构建配置文件简介 中可以了解到:配置文件可以通过以下几种方式触发/激活:
  • 明确指定
  • 通过Maven设置
  • 基于环境变量
  • 操作系统设置
  • 存在或缺失的文件
这些都不能帮助定义配置文件之间的任何关系(因为在构建项目时评估配置文件),所以您唯一的选择是:
  • 接受限制,并使用-P语法明确激活所需的配置文件
  • 编写一个封装Maven调用并自动添加缺少的配置文件的shell脚本
  • 构建自己的DefaultProfileSelector替代品,如我在以前的回答中所述

嗨,Sean,感谢您的回复。我将寻找DefaultProfileSelector的替代品。他们应该让我们在maven($ {})中定义一个属性,我们可以在激活部分检查它,或者使用配置文件的继承或聚合机制。 - HowHigH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接