Ich versuche, ein Hudson-Plugin zu erstellen, das ich geändert habe und für das jdk1.6 erforderlich ist. Das ist in Ordnung, aber ich verstehe nicht, wie ich Maven sagen kann, wo das andere JDK ist. Ich habe nur wenige Erwähnungen im Internet gefunden, aber sie scheinen nicht auf mich zuzutreffen. Einige schlagen vor, eine Konfiguration zu .m2/settings.xml
Hinzuzufügen, aber ich habe keinen settings.xml
. Außerdem möchte ich 1.6 nicht für alle Maven-Builds verwenden.
Ein Nachteil ist, dass ich mvn
in Cygwin verwende, wenn das überhaupt wichtig ist. Es scheint, dass ich in der Lage sein sollte, die Spezifikation in der Projekt-POM-Datei vorzunehmen, aber die vorhandene POM ist ziemlich kahl.
Unterm Strich gibt es also eine Möglichkeit, ein JDK für einen einzelnen Aufruf von Maven anzugeben?
Unterm Strich gibt es also eine Möglichkeit, ein JDK für einen einzelnen Aufruf von Maven anzugeben?
Ändern Sie vorübergehend Ihr Java_HOME
.
Scheint, dass Maven jetzt eine Lösung hier gibt: Kompilieren von Quellen mit einem anderen JDK
Sagen wir dein Java_HOME
verweist auf JDK7 (das Maven-Prozesse ausführt)
Ihre pom.xml
könnte sein :
<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>
Wenn Ihre Entwickler nur die folgenden Zeilen in ihrem settings.xml
, dein POM wird plattformunabhängig sein:
<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>
compile: compile hat eine Benutzereigenschaft , mit der Sie einen Pfad zum javac
angeben können.
Beachten Sie, dass diese Benutzereigenschaft nur funktioniert, wenn fork
true
ist, was standardmäßig false
ist.
$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile
Möglicherweise müssen Sie den Wert in Anführungszeichen setzen, wenn er Leerzeichen enthält.
> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile
Siehe auch Vorrang für benutzerdefinierte Maven-Eigenschaften .
Wie du sagtest "Plus, ich möchte nicht 1.6 für alle Maven-Builds verwenden.".
<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>
Dadurch wird sichergestellt, dass Ihr spezielles Projekt diese Version von jdk verwendet.
Ich sage, Sie richten Java_HOME so ein, wie Pascal es sagt: Wenn Sie in Cygwin bash verwenden, sollte Ihre Shell "export Java_HOME =/cygdrive/c/pathtothejdk" lauten. Und es schadet nie, auch das Bin-Verzeichnis Java in den PATH zu exportieren mit "export PATH = $ {Java_HOME}/bin: $ {PATH}"
und maven-enforce-plugin hinzufügen, um sicherzustellen, dass das richtige jdk verwendet wird. Dies ist eine gute Übung für Ihren 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
Ich weiß, es ist ein alter Faden. Aber ich hatte einige Probleme mit etwas ähnlichem in Maven für Java 8 Compiler-Quelle. Ich fand dies mit einer schnellen Lösung heraus, die in dieser Artikel erwähnt wurde und dachte, ich kann Stellen Sie es hier und vielleicht können Sie anderen helfen:
<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 verwendet die Variable $ JAVACMD als endgültigen Java) - Befehl. Legen Sie fest, wo die ausführbare Datei Java) den Maven auf ein anderes JDK umstellt.
Mit Hudson können Sie auch mehrere Java) - Laufzeiten definieren und Maven damit aufrufen. Schauen Sie sich die Konfigurationsseite genauer an.
Für 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>
Ich hatte ein Problem mit Maven in Eclipse unter Windows 7.
Obwohl ich bemerkte, dass mvn build von der Kommandozeile aus einwandfrei lief.
mvn -T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml > output.log
Eclipse erwog als Standard-JVM eine JRE-Installation anstelle von JDK, sodass diese beim Kompilieren fehlschlug.
Ich habe folgende Zeile zu Eclipse.ini hinzugefügt:
-vm
C:\Program Files (x86)\Java\jdk1.8.0_25\bin
Auch beim Starten von Eclipse habe ich im Abschnitt "Ziele" folgende Liste verwendet:
-T 5 -B -e -X -U -P test clean install -Dmaven.surefire.debug --settings ..\..\infra-scripts\maven-conf\settings.xml
Kompilierungsfehler wurde behoben.