it-swarm.com.de

Geben Sie JDK an, das Maven verwenden soll

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?

120
DanInDC

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.

120
Pascal Thivent

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

compile: compile hat eine Benutzereigenschaft , mit der Sie einen Pfad zum javac angeben können.

Beachten Sie, dass diese Benutzereigenschaft nur funktioniert, wenn forktrue 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 .

27
Jin Kwon

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.

23
DevCoder

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

14
feniix

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>
11
Parth Joshi

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.

6
Lin Gao

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

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.

0
aprodan