2

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

我尝试过像这样的激活

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

但它不起作用,尽管 ${basedir} 的使用记录在 Maven 文档中(这是 Maven 中的一个错误)。基于当前模块是否有不同的激活方式?或者 Maven 是否只允许激活所有模块的配置文件或根本不允许?

4

6 回答 6

5

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

  • Maven 配置文件不是继承的,因此您不能在父 POM 中定义配置文件并在子 POM 中激活它。
  • 我还没有找到从 POM 本身激活配置文件的可能性。激活不适用于 ${basedir} 并且属性激活仅响应系统设置,这些设置是通过 -D 选项全局指定的。
于 2009-06-23T12:39:46.077 回答
2

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

于 2010-03-16T19:18:51.310 回答
2

对于像我这样阅读这个问题以寻找答案的人来说,这个用例现在可以在 Maven 3 中使用。

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

于 2012-08-01T10:00:46.797 回答
0

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

<activation>
   <file>
      <missing>target/jboss/conf/jboss-service.xml</missing>
   </file>
</activation>
于 2009-08-10T10:54:27.257 回答
0

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

  1. 我在父 POM 中创建并描述了配置文件,它具有activeByDefault=false. PluginManagement-Section 然后包含不同插件的配置。
  2. 孩子们可以重用这个配置文件,并设置activeByDefault=true This 使配置文件处于活动状态,但仍然没有激活任何插件。
  3. 但幸运的是,所描述的插件配置是可用的。您可以通过在 Plugins-Section 中定义它们来在子项中重用它们。您只需提供组和 artifactID,并inherited=true为您要在子级中重用的每个插件进行设置。

我希望这会有所帮助。很抱歉没有包含任何代码片段,但我希望即使如此,这些解决方案也是可以理解的。

于 2014-05-12T13:22:34.407 回答
-2

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

于 2009-06-19T19:11:03.293 回答