我有一个大型的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中定义了两个配置文件:
java
激活maven-javadoc-plugin
scala
不会激活maven-javadoc-plugin
,而是激活maven-scala-plugin
并将其配置为the example from its documentation 在主POM中,java
配置文件默认设置为活动,因为Java是默认配置文件。当项目使用Scala时,我想激活scala
个人资料,并停用java
,但为activeByDefault
个人资料设置false
至java
无效,导致编译错误。
那么,有没有办法启用特定于模块的配置文件而无需在每个pom中手动设置它?
答案 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包装项目