Wie kann ich herausfinden und ändern, welche Version von Java Maven zur Ausführung verwendet wird?

74

Beim Ausführen unseres Maven-Builds erhält ein Mitglied meines Teams beim Ausführen einen Fehler. Wenn wir jedoch java -versionvon ihrer Befehlszeile aus ausführen , zeigt dies Java 1.6.0_26 an. Der Fehler scheint offensichtlich zu schreien, dass Maven Java 5 verwendet.

Wie kann ich herausfinden und ändern, welche Java-Version von Maven verwendet wird?

3 potenziell wichtige Hinweise:

  1. Dies wird in der Befehlszeile ausgeführt, ohne das Eclipse-Plugin zu verwenden
  2. JAVA_HOME ist auf ein Java 1.6 JDK eingestellt
  3. Verwenden von Maven 2.2.1
shsteimer
quelle
Anscheinend wird JDK 1.6.0_26 verwendet, um Ihre Quelle mit 1.5 zu kompilieren. Das ist möglich!
Kasun Gajasinghe
8
eek! :( "dieser Fehler" Link ist gebrochen
Barett

Antworten:

113

mvn -versiongibt aus, welches Java verwendet wird. Wenn JAVA_HOME auf ein gültiges JDK-Verzeichnis festgelegt ist und Maven etwas anderes verwendet, hat höchstwahrscheinlich jemand die Art und Weise, wie Maven gestartet wird, manipuliert.

Ryan Stewart
quelle
4
Sie können das Java definieren, das mit maven verwendet werden soll. Siehe den Thread: stackoverflow.com/questions/18813828/…
Neto Marin
10

Sie müssen konfigurieren maven-compiler-plugin, um 1.6 sourceund targetParameter zu verwenden (standardmäßig ist es 1.5).

Dies geschieht am besten im übergeordneten <pluginManagment>Abschnitt Ihres Projekts im Abschnitt (aber Sie können es natürlich immer für einzelne Projekte konfigurieren).

  <build>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
            <source>1.6</source>
            <target>1.6</target>

          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
Alexander Pogrebnyak
quelle
2

mvn -versionHier erfahren Sie, welchen Compiler Maven verwendet. Dies beantwortet die Frage, es sei denn, Ihr POM gibt Überschreibungswerte für die zu verwendenden Versionen an.

Hier ist der einfachste Weg, um die Überschreibungen in anzugeben pom.xml:

<properties>
    <maven.compiler.target>1.9</maven.compiler.target>
    <maven.compiler.source>1.9</maven.compiler.source>
</properties>

Alternativ maven-compiler-pluginkann das expliziter angegeben werden. Schauen Sie sich in diesem Fall die <source>und <target>die mit dem Plugin verknüpften Werte an.

Beide Optionen werden hier beschrieben .

Wenn Ihr POM eine hat <parent>, müssen Sie dies ebenfalls überprüfen (rekursiv).

Hinweis: Wenn sourceund targetangegeben werden, werden diese Werte als Befehlszeilenoptionen an den Compiler übergeben. Mit dieser Funktion können Sie frühere Java-Versionen als den Nennwert des Compilers kompilieren oder ausführen.

Brent Bradburn
quelle
Ein Beispiel für das Festlegen des Compilers, wenn Sie nicht einfach javacvon Ihrem Pfad aus verwenden möchten : JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 mvn clean install. Ihr Kilometerstand kann variieren, wie / wann dies unter Maven überschrieben werden kann.
Brent Bradburn
Als ultimative geistige Gesundheit zu überprüfen, könnten Sie fragen javac/ javaaus der Build - Umgebung durch die Build - Parameter Einstellung hinzufügen , -versionum das Befehlszeilenargument - ähnlich wie hier (für Gradle).
Brent Bradburn
<java.version>in pom.xmlist dafür nicht relevant: Angabe der Java-Version in Maven - Unterschiede zwischen Eigenschaften und Compiler-Plugin
Brent Bradburn
Denken Sie daran, dass JAVA_HOMEdies möglicherweise bereits in Ihrer Umgebung festgelegt wurde und die PATHVariable überschreibt .
Brent Bradburn
Dies scheint wichtig zu sein, wenn es nicht so lächerlich wäre: maven.apache.org/enforcer/enforcer-rules/…
Brent Bradburn