2013-08-08 5 views
7

Ich habe sowohl JDK 1.6 als auch 1.7 auf meinem System installiert (Linux, im Verzeichnis/opt). Ich habe das Verzeichnis bin für JDK 1.6 in meinem Pfad hinzugefügt, das ist die Version von Java, die standardmäßig verwendet wird.Wie kann ich Maven so konfigurieren, dass JDK6 standardmäßig verwendet wird, aber JDK7 nach Bedarf?

Ich arbeite an einem Projekt, das JDK 1.7 erfordert und einige, die 1.6 erfordern. Zuvor hatte ich JDK 1.7-Einstellungen in Eclipse festgelegt, aber ich wollte dieses Projekt in Maven konvertieren, damit jeder seinen bevorzugten Editor verwenden konnte.

Ist es möglich, den 1.7-Standort in einer Maven-Installation/Konfiguration (und nicht in der POM-Datei) so anzugeben, dass er standardmäßig 1.6 verwendet und 1.7 bei der Angabe des Projekts im POM benötigt? Soweit mir bekannt ist, sollte jeder, der an einem Projekt arbeitet, den gleichen Inhalt in seinen POM-Dateien haben. Daher möchte ich den Speicherort des Java 7-Verzeichnisses hier nicht festlegen (da es auf allen Rechnern anders sein wird).

$ 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" 

Hinzufügen die folgenden:

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

Ergebnisse in:

[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] 

Antwort

4

Werfen Sie einen Blick here. Sie können eine Eigenschaft in Ihrer settings.xml festlegen und sie in der Pom verwenden. Sei dir bewusst, dass jeder diese Eigenschaft definieren müsste.

Wie für Ihr Beispiel:

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

und in den Einstellungen:

<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

Das sieht den Weg zu gehen ; vermutlich sollte 'settings.xml' aus dem VCS herausgehalten werden (als separater Download eingestellt)? – ataulm

+0

Es sollte auf jeden Fall außerhalb von VCS gehalten werden, da es bestimmte lokale Einstellungen enthalten könnte. Sie könnten eine Vorlage einchecken, wenn Sie einige Standardwerte leicht anpassen möchten, aber jeder Benutzer muss sie an seine Bedürfnisse anpassen. –

+1

Ah, sogar Einstellung einer Umgebungsvariable ist genug es sieht aus - um eine Einstellungsdatei zu vermeiden (aber jeder Entwickler diese Variable setzen muss) – ataulm

1

Sie können eine Datei mvn.sh in der Nähe Ihres pom.xml, in dem benannten stellen Sie JAVA_HOME auf, was Sie wollen. Dann baue ein Projekt wie ./mvn clean install. Und stellen Sie sicher, es nicht zu VCS zu überprüfen.

1

Maven verwendet die Version, die sich in Ihrer JAVA_HOME-Systemvariablen befindet. Daher möchte ich meine .bash_profile-Funktionen hinzufügen, um zwischen ihnen nur in meiner aktuellen Shell zu wechseln, so dass Sie Java 6 standardmäßig lassen können, aber erlauben Sie sich trivial zu Java 7 oder sogar 8 zu wechseln, wenn Sie ein neueres Projekt erstellen müssen.

Gist to Change Java Versions on Demand

Wenn Ihr Terminal nicht so ist bash Sie müssen diese Lösung zwicken.

Persönlich bevorzuge ich dies in Ihrer settings.xml zu setzen, auch wenn es etwas mehr Arbeit ist, da Sie die gleiche Lösung für alle Build-Tools verwenden können und sogar nur für das Erstellen von JAR-Targeting für andere Java-Versionen.

So eine Lösung für Sie, so etwas zu .bash_profile (klar zwicken die Pfade entsprechend, wo immer die Java-Versionen auf Ihrem Computer installiert sind) könnten hinzufügen:

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 
} 
Verwandte Themen