2011-01-18 15 views
34

Chcę skonfigurować Maven2 do używania sun-java6-jdk do budowania modułów Java SE 1.6 i używania openjdk-7 do budowania modułów Java SE 1.7. Czy to możliwe?Skonfiguruj Mavena do używania różnych JDK dla różnych wersji J2SE?

Maven2 powinien następnie automatycznie wybrać prawidłowy JDK do budowania różnych modułów w jednym poleceniu.

Na przykład, powinno być

$ mvn package 

zamiast

$ cd module1 
$ update-alternatives ... jdk6 ... 
$ mvn package 
... 
$ cd module2 
$ update-alternatives ... jdk7 ... 
$ mvn package 

P.S. Nie ma nic o plikach pom.xml, które zostały już skonfigurowane z różnymi wartościami dla różnych modułów. Jeśli zdecyduję się użyć openjdk-7, Maven2 wygeneruje pliki w wersji 1.6, ale używając openjdk-7 zamiast sun-java6-jdk. Pytanie brzmi, jak skonfigurować profile Java SE.

+6

FYI: nie ma czegoś takiego jak J2SE 1.6. Począwszy od wersji 1.6, nazywa się Java SE (tak jak J2EE to teraz Java EE). [Referencja] (http://weblogs.java.net/blog/kgh/archive/2005/06/goodbye_j2se_he_1.html) –

Odpowiedz

83

się rozwiązać ten problem przez jawnie sepecify z javac w konfiguracji wtyczek kompilacji (z JAVA_HOME_6 i JAVA_HOME_7 zdefiniowany jako zmienne środowiska):

i dla Java 6 moduł

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <showDeprecation>true</showDeprecation> 
     <showWarnings>true</showWarnings> 
     <executable>${env.JAVA_HOME_6}/bin/javac</executable> 
     <fork>true</fork> 
    </configuration> 
</plugin> 

i Java modułu 7

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>1.7</source> 
     <target>1.7</target> 
     <showDeprecation>true</showDeprecation> 
     <showWarnings>true</showWarnings> 
     <executable>${env.JAVA_HOME_7}/bin/javac</executable> 
     <fork>true</fork> 
    </configuration> 
</plugin> 
+0

Dzięki, odpowiedziałeś niesamowicie szybko, zamierzam wyjaśnić moje pytanie jeszcze jeden krok, ale ty już daje odpowiedź. :) –

+0

@ 谢 继 雷 "Lenik dobrze, a następnie upvote być może będzie odpowiednie –

+1

Uwaga: Wydaje mi się, że jeśli JAVA_HOME jest ustawiony, to używa go bez względu na to, co i sekcji nie ma zastosowania. Musiałem go usunąć i faktycznie użyć JAVA_HOME_6 i JAVA_HOME_7 do pracy –

5

można powiedzieć maven-compiler-plugin do Compile Sources Using A Different JDK

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
    <executable><!-- path-to-javac --></executable> 
    </configuration> 
</plugin> 
1

z licznych upvotes na odpowiedź @ lweller za Myślę, że to dziwne, ale z 1.7 jak source i target Maven nadal próbował skompilować przy użyciu języka Java 1.5. Raczej tylko z 7 ... tak:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <configuration> 
     <source>7</source> <!-- see here, says only 7, not 1.7 --> 
     <target>7</target> <!-- here as well --> 
     <showDeprecation>true</showDeprecation> 
     <showWarnings>true</showWarnings> 
     <executable>${env.JAVA_HOME_7}/bin/javac</executable> 
     <fork>true</fork> 
    </configuration> 
</plugin> 

wersja Maven-kompilator-plugin 2.5.1.

+2

7 synonim 1.7. Zajrzyj na https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html dla parametrów '-source' i' -target' – freedev

Powiązane problemy