根据当前模块激活不同的Maven配置文件?

时间:2009-06-19 15:52:06

标签: maven-2 profile

我们有一个多模块构建,其中包含使用不同技术的模块,如Java和Flex。是否有可能根据当前编译的模块激活不同的配置文件?

我尝试使用类似

的激活
<profile>
  <id>flex</id>
  <activation>
    <file>
      <exists>${basedir}/src/main/flex</exists>
    </file>
  </activation>
  ...
</profile

但它没有用,虽然使用$ {basedir}是documented in the Maven documentation(这是Maven中的一个错误)。是否有不同的可能性基于当前模块进行不同的激活?或者Maven是否只允许激活所有模块的配置文件或根本不激活?

6 个答案:

答案 0 :(得分:5)

经过一些更多的研究后,我终于得出结论,由于当前Maven版本(2.1.0)中的两个原因,这是不可能的:

  • 不继承Maven配置文件,因此您无法在父POM中定义配置文件并在子POM中激活该配置文件。
  • 我没有找到从POM本身激活配置文件的可能性。激活不适用于$ {basedir},属性激活响应仅适用于通过-D选项全局指定的系统设置。

答案 1 :(得分:2)

在2.2.1中,配置文件是继承的,但$ {basedir}问题仍然存在。我在同一条船上 - 我需要根据给定项目中存在的文件来激活配置文件。我的子构建单独运行就好了(由本地文件存在激活的继承配置文件),但是如果我从顶级父级运行构建,它们会因为找不到文件而失败。

答案 2 :(得分:2)

对于那些喜欢自己阅读这个问题寻找答案的人来说,这个用例现在可以在Maven 3中使用。

在早期版本的3中有一个影响此功能的错误(请参阅http://jira.codehaus.org/browse/MNG-2363),但它对我来说正确使用Maven 3.0.4。

答案 3 :(得分:0)

关于基于文件的激活,您可以尝试删除$ {basedir}。我们这样使用它:

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>

答案 4 :(得分:0)

我不知道这是否有帮助,但我用以下方法解决了类似的问题:

  1. 我在父POM中创建并描述了配置文件,其中包含activeByDefault=false。然后,PluginManagement-Section包含不同插件的配置。
  2. 孩子们可以重复使用此个人资料,并设置activeByDefault=true 这会使配置文件处于活动状态,但仍然没有激活任何插件。
  3. 但幸运的是,所描述的插件配置可用。您可以通过在插件部分中定义它们来重用它们。您只需提供group-和artifactID,并为要在子项中重复使用的每个插件设置inherited=true
  4. 我希望有所帮助。很抱歉不包含任何代码段,但我希望即使这样也可以理解。

答案 5 :(得分:-2)

您可以在每个模块中设置要使用配置文件的属性,然后在配置文件中使用“属性”激活。