2014-01-30 63 views
1

我正在使用Maven 3.0.5。我有一個「maven-compile-plugin」的問題。基本上,我有2個項目,遺留一個是在Java 6中,而新的是Java 7中下 我現在的JAVA_HOME是好的,是:{resolved} Maven忽略了「maven-compiler-plugin」的要求

$ echo $JAVA_HOME C:\Program Files (x86)\Java\jdk1.6.0_38

在新的項目中,我用的是Maven的編譯插件使用此配置:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <fork>true</fork> 
      <verbose>true</verbose> 
      <source>1.7</source> 
      <target>1.7</target> 
      <executable>${JDK7}</executable> 
      <compilerVersion>1.7</compilerVersion> 
     </configuration> 
    </plugin> 

我已經宣佈在settings.xml的JDK7變量:

<profiles> 
    <profile> 
     <id>compiler</id> 
     <properties> 
      <JDK6>C:\Program Files (x86)\Java\jdk1.6.0_38\bin\javac</JDK6> 
      <JDK7>C:\Program Files (x86)\Java\jdk1.7.0_45\bin\javac</JDK7> 
     </properties> 
    </profile> 
</profiles> 
<activeProfiles> 
    <activeProfile>compiler</activeProfile> 
</activeProfiles> 

在新的項目,我也是用的實施者插件來查看編譯的源代碼是Java 7兼容,所以在我的POM,我有:

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-enforcer-plugin</artifactId> 
<version>1.3.1</version> 
<executions> 
    <execution> 
     <id>enforce-versions</id> 
     <phase>validate</phase> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
     <configuration> 
      <rules> 
       <requireJavaVersion> 
        <version>1.7</version> 
       </requireJavaVersion> 
      </rules> 
     </configuration> 
    </execution> 
</executions> 

我不與Maven理解的事情是它總是使用由JAVA_HOME定義的編譯器。因爲它默認爲Java 6中,當我建立新的項目時,執法插件總是失敗造成的Maven使用Java 6:

 $ mvn compile -X 
    Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100) 
    Maven home: c:\Dev\apache-maven-3.0.5 
    Java version: 1.6.0_38, vendor: Sun Microsystems Inc. 
    Java home: c:\Program Files (x86)\Java\jdk1.6.0_38\jre 
    Default locale: fr_FR, platform encoding: Cp1252 
    OS name: "windows 7", version: "6.1", arch: "x86", family: "windows" 
[...] 
[INFO] --- maven-enforcer-plugin:1.3.1:enforce (enforce-versions) @ arom-wrapper --- 
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message: 
Detected JDK Version: 1.6.0-38 is not in the allowed range 1.7. 

能否請你幫我在這一個?

編輯:

好吧,我想我已經找到了根源,它可能是我是一個傻瓜。 Maven使用JDK 6啓動,但這些類在Java 7中編譯良好,我已檢查輸出類的次要/主要版本。正如Aurélien所說,執行者插件只是在這裏檢查Maven是否是用JDK 6啓動的。所以我刪除了執行者規則。謝謝 !

+0

我不認爲這個執行者插件的規則是在這裏檢查JDK的兼容性。這只是確保在機器上安裝JDK版本的一種方法:http://maven.apache.org/enforcer/enforcer-rules/requireJavaVersion.html –

+0

但是,如果這可以簡化您的過程。您實際上可以使用JDK 6兼容模式進行編譯,同時使用版本7。你可以信任maven編譯器插件來處理他的配置 –

+0

如果你想檢查是否符合某個JDK,你應該看一下[animal-sniffer-maven-plugin](http://mojo.codehaus.org /動物嗅探-行家-插件/)。 – khmarbaise

回答

0

好吧,我想我找到了根本原因,這可能是我成爲一個白癡。 Maven是使用JDK 6發佈的,但是這些類在Java 7中編譯得很好,我已經檢查了輸出類的次要/主要版本。正如Aurélien所說,執行者插件只是在這裏檢查Maven是否是用JDK 6啓動的。所以我刪除了執行者規則。謝謝 !