2013-08-08 9 views
7

Mam zarówno JDK 1.6 i 1.7 zainstalowany na moim systemie (Linux, w katalogu/opt). Dodałem katalog bin dla JDK 1.6 w mojej ścieżce, więc jest to wersja Java używana domyślnie.Jak mogę skonfigurować Mavena tak, aby domyślnie używał JDK6, ale JDK7 w razie potrzeby

Pracuję nad projektem, który wymaga JDK 1.7, a niektóre wymagają 1.6. Poprzednio ustawiłem ustawienia JDK 1.7 w środowisku Eclipse, ale chciałem przekonwertować ten projekt na Maven, aby każdy mógł skorzystać z preferowanego edytora.

Czy możliwe jest określenie położenia 1,7 na instalacji/konfiguracji Mavena (a nie w pliku POM), tak aby domyślnie korzystał z wersji 1.6, a 1.7 przy określaniu projektu wymaga tego w POM? O ile mi wiadomo, wszyscy pracujący nad projektem powinni mieć tę samą zawartość w swoich plikach POM, więc niechętnie ustalam lokalizację katalogu Java 7 (ponieważ będzie on inny na komputerach wszystkich).

$ mvn --version 
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 13:51:28+0000) 
Maven home: /opt/apache-maven-3.0.5 
Java version: 1.6.0_45, vendor: Sun Microsystems Inc. 
Java home: /opt/jdk1.6.0_45/jre 
Default locale: en_GB, platform encoding: UTF-8 
OS name: "linux", version: "3.8.0-27-generic", arch: "amd64", family: "unix" 

dodanie poniższych informacji:

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.6</version> 
      <configuration> 
       <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

skutkuje:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project golemlite: Fatal error compiling: invalid target release: 1.7 -> [Help 1] 

Odpowiedz

4

spojrzeć here. Możesz ustawić właściwość w pliku settings.xml i użyć jej w pom. Należy pamiętać, że każdy będzie musiał zdefiniować tę właściwość.

Jak dla przykładu:

<build> 
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <configuration> 
     <source>1.7</source> 
     <target>1.7</target> 
     <fork>true</fork> 
     <executable>${JAVA_1_7_HOME}/bin/javac</executable> 
    </configuration> 
    </plugin> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.6</version> 
     <configuration> 
      <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory> 
     </configuration> 
    </plugin> 
</plugins> 
</build> 

i w ustawieniach:

<settings> 
    [...] 
    <profiles> 
    [...] 
    <profile> 
     <id>compiler</id> 
     <properties> 
      <JAVA_1_7_HOME>/path/to/jdk7</JAVA_1_7_HOME> 
     </properties> 
    </profile> 
    </profiles> 
    [...] 
    <activeProfiles> 
    <activeProfile>compiler</activeProfile> 
    </activeProfiles> 
</settings> 
+0

To wygląda droga ; przypuszczalnie 'settings.xml' powinien być trzymany poza VCS (ustawionym jako osobne pobranie)? – ataulm

+0

Z całą pewnością powinien być przechowywany poza VCS, ponieważ może zawierać określone ustawienia lokalne. Możesz sprawdzić szablon, jeśli chcesz z łatwością przesłać niektóre wartości domyślne, ale każdy użytkownik będzie musiał dostosować go do swoich potrzeb. –

+1

Ah, nawet ustawienie zmiennej środowiskowej jest wystarczające, wygląda - aby uniknąć pliku ustawień (ale wymaga od każdego programisty ustawienia tej zmiennej) – ataulm

1

można umieścić plik o nazwie mvn.sh blisko swojej pom.xml w którym można ustawić JAVA_HOME aby cokolwiek chcesz. Następnie zbuduj projekt taki jak ./mvn clean install. I nie należy go sprawdzać w VCS.

1

Maven używa dowolnej wersji w zmiennej systemowej JAVA_HOME. Tak więc lubię dodawać do moich funkcji .bash_profile, aby wymieniać się nimi w mojej obecnej powłoce, więc domyślnie możesz zostawić Java 6, ale pozwól sobie na trywialne przejście do Javy 7 lub nawet 8, gdy potrzebujesz zbudować nowszy projekt.

Gist to Change Java Versions on Demand

Jeśli terminal nie jest bash to być może trzeba dostosować do tego rozwiązania.

Osobiście preferuję to ustawienie w pliku settings.xml, mimo że jest nieco więcej pracy, ponieważ pozwala używać tego samego rozwiązania na wszystkich narzędziach do budowania, a nawet tylko do uruchamiania słoików zbudowanych na innych wersjach Java.

Więc rozwiązaniem może być dodanie czegoś podobnego do bash_profile (wyraźnie szczypanie ścieżki odpowiednio do miejsca, gdzie nigdy wersje Java są zainstalowane na komputerze):

function java6 
{ 
    JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0_65-b14-462.jdk/Contents/Home 
    export JAVA_HOME 
} 

function java7 
{ 
    JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home 
    export JAVA_HOME 
} 
Powiązane problemy