2015-04-23 77 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模塊分別

相關問題