2013-08-08 13 views
7

Ho entrambi JDK 1.6 e 1.7 installati sul mio sistema (Linux, sotto la directory/opt). Ho aggiunto la directory bin per JDK 1.6 nel mio percorso, quindi questa è la versione di Java usata di default.Come configurare Maven per utilizzare JDK6 di default, ma JDK7 come necessario

Sto lavorando a un progetto che richiede JDK 1.7 e alcuni che richiedono 1.6. Precedentemente avevo impostato le impostazioni JDK 1.7 in Eclipse, ma volevo convertire questo progetto in Maven in modo che tutti potessero usare il loro editor preferito.

E 'possibile specificare la posizione 1.7 su un Maven installazione/configurazione (e non nel file POM) in modo tale che esso utilizza 1.6 di default e 1,7 quando si specifica il progetto lo richiede in POM? Per quanto ne so, tutti quelli che lavorano su un progetto dovrebbero avere gli stessi contenuti nei loro file POM, quindi sono riluttante a impostare qui la posizione della directory Java 7 (dato che sarà diversa sulle macchine di tutti).

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

L'aggiunta dei seguenti:

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

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

risposta

4

Date un'occhiata here. Puoi impostare una proprietà nel tuo settings.xml e usarla nel pom. Sii consapevole che tutti dovrebbero definire quella proprietà.

Per quanto riguarda il tuo esempio:

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

e nelle impostazioni:

<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

questo sembra la strada da percorrere ; presumibilmente 'settings.xml' dovrebbe essere tenuto fuori dal VCS (impostato come download separato)? – ataulm

+0

Dovrebbe essere comunque tenuto fuori da VCS in quanto potrebbe contenere impostazioni locali specifiche. È possibile archiviare un modello se si desidera suddividere facilmente alcune impostazioni predefinite, ma ogni utente dovrebbe adattarlo alle proprie esigenze. –

+1

Ah, anche l'impostazione di una variabile d'ambiente è sufficiente per evitare un file di impostazioni (ma è necessario che ogni sviluppatore imposti tale variabile) – ataulm

1

È possibile inserire un file di nome mvn.sh vicino al vostro pom.xml in cui è possibile impostare manualmente JAVA_HOME per tutto quello che vuoi. Quindi, crea un progetto come ./mvn clean install. E assicurati di non controllarlo su VCS.

1

Maven utilizza qualsiasi versione presente nella variabile di sistema JAVA_HOME. Quindi mi piace aggiungere alle mie funzioni .bash_profile per scambiare tra loro solo nella mia shell corrente, così puoi lasciare Java 6 di default ma permetterti di passare banalmente a Java 7 o addirittura a 8 quando devi creare un nuovo progetto.

Gist to Change Java Versions on Demand

Se il terminale non è bash, allora potrebbe essere necessario modificare questa soluzione.

Personalmente preferisco impostarlo in settings.xml anche se è leggermente più utile in quanto consente di utilizzare la stessa soluzione su tutti gli strumenti di compilazione e anche solo per l'esecuzione di giare creati per il targeting di altre versioni di Java.

Quindi una soluzione per voi potrebbe essere l'aggiunta di qualcosa di simile al vostro .bash_profile (tweaking chiaramente i percorsi in modo appropriato dove mai le versioni Java sono installati sul computer):

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 
} 
Problemi correlati