Specificare JDK per Maven per l'uso
Domanda
Sto cercando di costruire un Hudson plugin li ho modificati e richiede jdk1.6.Questo è bene, ma non vedo come posso dire, maven, in cui i diversi jdk.Ho trovato alcune menzioni su internet, ma che non sembra valere per me.Alcuni suggeriscono che l'aggiunta di alcune config per .m2/settings.xml
ma non ho un settings.xml
.Inoltre, non voglio usare 1.6 per tutti maven costruisce.
Un nodo è sto utilizzando mvn
in cygwin, se interessa a tutti.Appare dovrei essere in grado di fare la specificazione del progetto pom file, ma esistente pom è abbastanza nude.
Così la linea di fondo è, c'è un modo per specificare un jdk per un'unica invocazione di maven?
Soluzione
linea in modo di fondo è, c'è un modo per specificare un JDK per una singola invocazione di Maven?
cambiare temporaneamente il JAVA_HOME
.
Altri suggerimenti
Sembra che Maven ora dà una soluzione qui: Fonti Compilazione utilizzando un diverso JDK
Diciamo che i tuoi punti JAVA_HOME
a JDK7 (che si svolgerà processi Maven)
Il tuo pom.xml
potrebbe essere:
<build>
<plugins>
<!-- we want JDK 1.6 source and binary compatiblility -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- ... -->
<!-- we want sources to be processed by a specific 1.6 javac -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<verbose>true</verbose>
<fork>true</fork>
<executable>${JAVA_1_6_HOME}/bin/javac</executable>
<compilerVersion>1.3</compilerVersion>
</configuration>
</plugin>
</plugins>
</build>
Se i vostri sviluppatori è sufficiente aggiungere (e personalizzare) le seguenti righe nella loro settings.xml
, il vostro pom sarà indipendente dalla piattaforma:
<settings>
[...]
<profiles>
[...]
<profile>
<id>compiler</id>
<properties>
<JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
<JAVA_1_6_HOME>C:\Program Files\Java\j2sdk1.6.0_18</JAVA_1_6_HOME>
</properties>
</profile>
</profiles>
[...]
<activeProfiles>
<activeProfile>compiler</activeProfile>
</activeProfiles>
</settings>
compilazione: compilare ha un proprietà utente che consente di specificare un percorso per il javac
.
Si noti che questa proprietà utente funziona solo quando è fork
true
che è false
per impostazione predefinita.
$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile
Potrebbe essere necessario raddoppiare citare il valore se contiene spazi.
> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile
Si veda anche Maven proprietà personalizzate la precedenza .
Come u ha detto "In più, non voglio usare 1.6 per tutti i Maven costruisce." .... Quindi meglio che posso dire modificare il file pom e specificare quale versione JDK da utilizzare.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.9</source>
<target>1.9</target>
</configuration>
</plugin>
</plugins>
</build>
Si farà in modo che il vostro progetto particolare utilizza tale versione del JDK.
voi, lo dico configurazione JAVA_HOME come Pascal dice: In cygwin se si utilizza bash come shell dovrebbe essere "export JAVA_HOME = / cygdrive / c / pathtothejdk" E non è mai danneggia esportare anche l'dir Java bin al percorso con "export PATH = $ {} JAVA_HOME / bin: $ {PATH}"
e anche aggiungere Maven-rispettare-plugin per assicurarsi che il JDK destra viene utilizzato. Questa è una buona pratica per il vostro pom.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireJavaVersion>
<version>1.6</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
http://maven.apache.org/plugins/maven- enforcer-plugin / usage.html
So che la sua un vecchio thread. Ma ho avuto alcuni problemi con qualcosa di simile a questo in Maven per Java 8 sorgente del compilatore. Ho capito questo con una soluzione rapida di cui questo articolo pensato posso metterlo qui e forse può aiutare gli altri:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Maven utilizza variabile $ JAVACMD come il comando finale java, impostarlo in cui l'eseguibile java è commuterà Maven per diversi JDK.
Hudson permette anche di definire diversi tempi di esecuzione di Java, e lasciare che si richiama Maven con uno di questi. Date un'occhiata più da vicino nella pagina di configurazione.
Per Java 9 :
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>9</source>
<target>9</target>
</configuration>
</plugin>
</plugins>
</build>
Ho avuto costruire problema con Maven all'interno di Eclipse su Windows 7.
Anche se ho osservato mvn accumulo stava funzionando bene da linea di comando.
mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml > output.log
Eclipse stava prendendo in considerazione come predefinito JVM un'installazione di JRE, invece di JDK così è stato venendo a mancare sulla compilation.
Ho aggiunto al eclipse.ini seguente riga:
-vm
C:\Program Files (x86)\Java\jdk1.8.0_25\bin
Anche quando si inizia da Eclipse che ho usato in "obiettivi" nella sezione seguente elenco:
-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml
errore di compilazione ottenuto risolto.