2014-01-30 7 views
1

Я использую Maven 3.0.5. У меня проблема с «maven-compile-plugin». В принципе, у меня есть 2 проекта, наследие один находится в Java 6, и новый под Java 7. Мой текущий JAVA_HOME прекрасен и:{решена} 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> 

Я объявил переменную JDK7 в settings.xml:

<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. 

Не могли бы вы помочь мне в этом?

EDIT:

Хорошо, я думаю, я нашел причину, и это, вероятно, меня идиотом. Maven запускается с использованием JDK 6, но классы хорошо компилируются в Java 7, я проверяю малую/основную версию выходных классов. Плагин forcecer, как упоминал Aurélien, только здесь, чтобы проверить, что Maven был запущен с JDK 6. Поэтому я удалил правило принудительного исполнения. Спасибо !

+0

Я не думаю, что это правило плагина-исполнителя здесь, чтобы проверить совместимость JDK. Это просто способ обеспечить версию JDK, установленную на компьютере: http://maven.apache.org/enforcer/enforcer-rules/requireJavaVersion.html –

+0

Но если это может упростить ваш процесс. Фактически вы можете скомпилировать в режиме совместимости JDK 6 при использовании версии 7 на ежедневной основе. И вы можете доверять плагину компилятора maven, чтобы обработать его cnnfiguration. –

+0

Если вы хотите проверить соответствие JDK, вы должны взглянуть на [animal-sniffer-maven-plugin] (http://mojo.codehaus.org/животное-сниффер-Maven-плагин /). – khmarbaise

ответ

0

Хорошо, я думаю, что нашел основную причину, и это, вероятно, я, будучи идиотом. Maven запускается с использованием JDK 6, но классы хорошо компилируются в Java 7, я проверяю малую/основную версию выходных классов. Плагин forcecer, как упоминал Aurélien, только здесь, чтобы проверить, что Maven был запущен с JDK 6. Поэтому я удалил правило принудительного исполнения. Спасибо !