2015-04-23 106 views
1

我有一个大的Maven项目,有一个主模块和很多孩子,组织在一个漂亮的树形结构中。但是,某些模块需要特殊的设置,这会导致其他模块中的错误行为。例如,在Hadoop上有些模块需要Java源代码级别为1.7,所有其他Java模块使用1.8级别的源代码级别,现在Scala模块引入到此树中,该代码使用scala-maven-plugin进行编译,这需要maven-compiler-plugin的特殊设置编译混合Java/Scala模块时。如何激活每个pom.xml的Maven配置文件?

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

在主POM中,默认情况下java配置文件被设置为活动状态,因为Java是默认设置。当一个项目使用Scala时,我想激活scala配置文件,并取消激活java,但将activeByDefault设置为false对于java配置文件没有任何影响,导致编译错误。

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

回答

0

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

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

此外,如果你不想执行一些配置文件,那么你必须在项目的pom.xml文件

+0

这意味着,当我有模块, B和C,A和B使用Java配置文件,C使用Scala,我必须将这些配置文件分别添加到所有模块中? – rabejens

1

据我了解,你要激活基于其配置子POM配置文件添加

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

。恐怕这是不可能的。但是,您可以重新组织项目树结构以利用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,子poms只指定java/scala详细信息。

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

0

不要使用个人资料,Mateusz Balbus答案,那就是定义嵌套POM打包项目,定义Java和Scala模块分别

相关问题