2010-03-28 112 views
29

現在,我正在編寫一個我自己的小型java應用程序,只有很少的maven pom.xml文件。我想讓我的所有maven軟件包都能用jdk 1.6進行編譯,而且我無法找到一個好方法,無需在每個POM上手動設置它 - 我厭倦了複製和粘貼默認的maven編譯器設置

<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-compiler-plugin</artifactId> 
<configuration> 
<source>1.6</source> 
<target>1.6</target> 
</configuration> 

在我生成的每個pom.xml文件中。

有沒有更簡單的方法來解決這個問題?

回答

16

創建一個pom-only(<packaging>pom</packaging>)項目,其中包含編譯器設置(以及任何其他默認設置)。你可以像對待任何其他項目一樣對其進行處理(釋放它;將其部署到Maven回購等)。

將一個parent聲明在你的pom文件的頂部:

<parent> 
    <groupId><!-- parent's group id --></groupId> 
    <artifactId><!-- parent's artifact id --></artifactId> 
    <version><!-- parent's version --></version> 
</parent> 

它沒有太大的幫助,如果你想設置爲編譯器設置。但是,如果您發現自己在整個項目中以相同的方式配置大量插件,報表和依賴項,則可以創建一個父項來統一全部項目。

順便說一句 - 注意在您的父pom文件中聲明dependenciesplugins。通常你會想要dependencyManagementpluginManagement。有關更多詳細信息,請參閱thedocumentation

+0

到目前爲止,只有解決方案,我可以發現,以刺激日食m2e的行爲,即使在5年後,這張貼可能是我缺少東西在月食(火星)? – 2015-10-02 20:55:34

8

您可以在您的~/.m2/settings.xml中指定此插件和配置,然後將其應用於所有項目。

但是,這會讓您的項目不再具有可移植性 - 嘗試使用相同的pom.xml構建相同的代碼將會在其他機器上失敗,這些機器與您的值不具有相同的settings.xml值。

+1

settings.xml的maven引用沒有顯示配置插件的方法(http://maven.apache.org/settings.html)。我錯過了什麼嗎? 另外,我在settings.xml文件中已經有了一些條目(比如「project.build.sourceEncoding」屬性和附加的非標準存儲庫,所以對於我向settings.xml添加更多內容不是問題。 – 2010-03-28 02:14:33

+0

您可以設置一個配置文件(缺省爲活動狀態),其中javac插件具有此值,但未在該設置頁面上列出或提及,但支持該配置文件。請參閱m2_home/conf/settings.xml下的全局設置以供參考(可以也在這裏指定設置) – 2010-03-28 03:22:15

5

我生病複製和粘貼

是的,你應該用POM inheritance來避免這一點,在父POM配置maven-compiler-plugin

另一種選擇是使用@matt建議的解決方案(並且確定了使用settings.xml的優缺點)。

在這兩種情況下,這是典型的,我喜歡使用maven-enforcer-plugin及其requireJavaVersion規則,你將配置這樣的檢查設定:

<project> 
    [...] 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-enforcer-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
      <configuration> 
       <rules> 
       <requireJavaVersion> 
        <version>1.6</version> 
       </requireJavaVersion> 
       </rules> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

但它可以做更多的(如檢查Maven版本)。很有用。

3

我要讓我所有的行家包與JDK 1.6

編譯如果這是一個多模塊項目只是把這些設置頂層POM pluginManagement下。

如果您有許多獨立的項目只需複製並粘貼此配置。謹防「智能」解決方案,如將其設置在全球的某個地方。有一天你會想爲一個或兩個您的項目中使用不同的編譯器設置和噩夢將開始:-)

記住...

讓事情儘可能的簡單,但沒有簡單

相關問題