【问题标题】:Activate different Maven profiles depending on current module?根据当前模块激活不同的 Maven 配置文件?
【发布时间】:2010-11-04 08:38:00
【问题描述】:

我们有一个多模块构建,其中包含使用不同技术(如 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 是否只允许激活所有模块的配置文件?

【问题讨论】:

    标签: maven-2 profile


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 不起作用,因为使用这种表示法,它只会在相对于父 POM 位置的指定文件中查找一次,并且不会再次为子 POM 执行此操作。
        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

          • 在这里不起作用。我在具有“属性”激活的父级中定义了一个配置文件,并使用 部分将该属性定义为相应的值以激活该配置文件。配置文件未激活。即使我使用 mvn -Dproperty=value 指定属性。最后一个仅在我在父级上运行时才有效。似乎该属性实际上必须是通过 -D 选项指定的系统属性,并且配置文件根本没有被继承,这对我来说毫无用处:-(
          • 错了。该文档明确排除了在 pom 中测试 prop 集。
          猜你喜欢
          • 2010-12-03
          • 2014-02-27
          • 2013-09-24
          • 1970-01-01
          • 2011-04-01
          • 2012-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多