如何根据pom.xml激活Maven配置文件?

时间:2015-04-23 07:55:20

标签: maven

我有一个大型的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,但为activeByDefault个人资料设置falsejava无效,导致编译错误。

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

3 个答案:

答案 0 :(得分: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 你为top目录中的所有模块编写了一个主pom,child poms只是指定了java / scala的详细信息。

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

答案 1 :(得分:0)

如果要为每个项目(模块)配置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文件中的

答案 2 :(得分:0)

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