【问题标题】:How to activate a Maven profile per pom.xml?如何激活每个 pom.xml 的 Maven 配置文件?
【发布时间】:2015-04-23 07:55:19
【问题描述】:

我有一个大型 Maven 项目,其中包含一个主模块和许多子模块,以漂亮的树形结构组织。但是,某些模块需要特殊设置,这会导致其他模块出现异常行为。例如,在 Hadoop 上执行操作的模块需要 1.7 的 Java 源级别,所有其他 Java 模块都使用 1.8 的源级别,现在 Scala 模块被引入到使用 scala-maven-plugin 编译的树中,需要特殊设置用于编译混合 Java/Scala 模块时的maven-compiler-plugin

过去我只是有一个用于 Hadoop 东西的主模块,它定义了 1.7 的源级别并添加了所有必要的 Hadoop 依赖项。现在我想避免为用 Scala 编写的 Hadoop 东西定义另一个主模块,而在 Scala 中为非 Hadoop 东西定义另一个模块。我以为我可以使用配置文件,所以我在我的主 POM 中定义了两个配置文件:

在主 POM 中,java 配置文件默认设置为活动,因为 Java 是默认设置。当项目使用Scala时,我想激活scala配置文件,并停用java,但是将java配置文件的activeByDefault设置为false没有效果,导致编译错误。

那么,有没有一种方法可以启用特定于模块的配置文件,而无需在每个 pom 中手动设置?

【问题讨论】:

    标签: maven


    【解决方案1】:

    据我了解,您想根据子 pom 的配置激活配置文件。恐怕这是不可能的。但是,您可以重新组织项目树结构以利用 pom 继承: pom.xml // general properties for all projects |-- java-modules | -- pom.xml // inherits from master pom, configures maven-compile-plugin | -- java-8-modules | -- pom.xml // inherits from java-modules pom, uses java 8 compiler | -- java-8-project-a | -- java-7-modules | -- pom.xml // inherits from java-modules pom, uses java 7 compiler | -- java-7-project-a |-- scala-modules -- pom.xml // inherits from master pom, configures maven-scala-plugin -- scala-project-a 您为顶层目录中的所有模块编写一个主 pom,子 pom 只需指定 java/scala 详细信息。

    更多关于 pom 继承https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

    【讨论】:

      【解决方案2】:

      如果您想为每个项目(模块)配置 maven 配置文件,那么您必须在项目(模块)pom.xml 文件中添加配置文件设置

      <profiles>
        <profile>
          <activation>
            <jdk>1.4</jdk>
          </activation>
          <your properties goes here>
        </profile>
      </profiles>
      

      此外,如果您不想执行某些配置文件,则必须添加

          mvn groupId:artifactId:goal -P !profile-1,!profile-2
      

      在项目 pom.xml 文件中

      【讨论】:

      • 也就是说,当我有模块 A、B 和 C,并且 A 和 B 使用 Java 配置文件而 C 使用 Scala 配置文件时,我必须将这些配置文件单独添加到所有模块?跨度>
      【解决方案3】:

      不要使用配置文件,Mateusz Balbus 的答案,即定义嵌套的 pom 打包项目,分别定义 java 和 scala 模块

      【讨论】:

        猜你喜欢
        • 2014-10-29
        • 2018-07-03
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-05
        • 2015-03-30
        • 2015-09-04
        相关资源
        最近更新 更多