wake-up-neo.net

Maven kann Java 1.8 nicht kompilieren

Ich versuche, Maven zu benutzen, um ein Glas zu bauen, aber ich bekomme die Fehlermeldung

ERROR] Failed to execute goal org.Apache.maven.plugins:maven-compiler-plugin:3.1:compile 
(default-compile) on project Application: Fatal error compiling: invalid target release: 1.8 -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/MojoExecutionException

mvn -v Ausgänge

mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T09:29:23-08:00)
Maven home: /usr/local/Cellar/maven/3.2.5/libexec
Java version: 1.6.0_65, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.10.1", Arch: "x86_64", family: "mac"

So wie es aussieht, zeigt es auf die 1.6jdk 

aber ich habe die 1.8 jdk

Java-Version

Java -version
Java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

POM.xml

 <project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.brian.ridecellchallenge</groupId>
    <artifactId>Application</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.Apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.group.id.Launcher1</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>


    </build>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>
</project>
14
Brian

Maven ist darauf angewiesen, dass die Umgebungsvariable Java_HOME gesetzt ist. Stellen Sie es entsprechend Ihrem Betriebssystem ein und führen Sie Ihren Build erneut aus.

Bearbeiten: Verwenden Sie den Export, um die Variable festzulegen.

export Java_HOME=/path/to/Java
14
JamesB

Öffnen Sie als MacOS-Benutzer eine Terminal und erstellen oder bearbeiten Sie eine Datei .bash_profile (im Verzeichnis Ihres Benutzers zu Hause) und fügen Sie den folgenden Ausschnitt dort ein:

export Java_HOME=`/usr/libexec/Java_home -v 1.8`

Speichern Sie diese Datei und öffnen Sie eine Terminalinstanz erneut. Wenn Sie dort export als Befehl ausführen, sollte ein gültiger Java_HOME mit dem Speicherort Ihrer JDK 8-Installation angezeigt werden. Starten Sie anschließend Ihre IDE neu, und maven sollte in der Lage sein, Nice Java target 1.8-Code zu erstellen.

11
MWiesner

sie können die Konfiguration im Compiler-Plugin ausprobieren. Es arbeitet an meinem Einheimischen

      <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <executable><!--path-to-your-Java8-home-directoru--></executable>
                <compilerVersion>1.8</compilerVersion>
            </configuration>
        </plugin>
7
Bharat Bhagat

Da Maven die Version von jdk nicht kennt, die Sie erstellen möchten, können Sie es mit 

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
6
Luan Nguyen

Mir ist aufgefallen, dass das Maven-Compiler-Plugin die Konfigurationen ignoriert

<source>1.8</source>
<target>1.8</target>

Beim Erstellen meines Projekts mit der Option -X maven sehe ich tatsächlich, dass in der Konfiguration des Maven-Compiler-Plugins die Quelle und das Ziel 1.6 sein mussten:

[DEBUG] --------------------------------------------------------------
[DEBUG] Goal:          org.Apache.maven.plugins:maven-compiler-plugin:3.3:testCompile (default-testCompile)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <basedir default-value="${basedir}"/>
 <buildDirectory default-value="${project.build.directory}"/>
 <classpathElements default-value="${project.testClasspathElements}"/>
 <compileSourceRoots default-value="${project.testCompileSourceRoots}"/>
 <compilerId default-value="javac">${maven.compiler.compilerId}</compilerId>
 <compilerReuseStrategy default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}    </compilerReuseStrategy>
 <compilerVersion>${maven.compiler.compilerVersion}</compilerVersion>
 <debug default-value="true">${maven.compiler.debug}</debug>
 <debuglevel>${maven.compiler.debuglevel}</debuglevel>
 <encoding default-value="${project.build.sourceEncoding}">UTF-8</encoding>
 <executable>${maven.compiler.executable}</executable>
 <failOnError default-value="true">${maven.compiler.failOnError}</failOnError>
 <forceJavacCompilerUse default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
 <fork default-value="false">${maven.compiler.fork}</fork>
 <generatedTestSourcesDirectory default-value="${project.build.directory}/generated-test-sources/test-annotations"/>
 <maxmem>${maven.compiler.maxmem}</maxmem>
 <meminitial>${maven.compiler.meminitial}</meminitial>
 <mojoExecution default-value="${mojoExecution}"/>
 <optimize default-value="false">${maven.compiler.optimize}</optimize>
 <outputDirectory default-value="${project.build.testOutputDirectory}"/>
 <project default-value="${project}"/>
 <session default-value="${session}"/>
 <showDeprecation default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
 <showWarnings default-value="false">${maven.compiler.showWarnings}</showWarnings>
 <skip>${maven.test.skip}</skip>
 <skipMultiThreadWarning default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
 <source default-value="1.5">1.6</source>
 <staleMillis default-value="0">${lastModGranularityMs}</staleMillis>
 <target default-value="1.5">1.6</target>
 <testSource>${maven.compiler.testSource}</testSource>
 <testTarget>${maven.compiler.testTarget}</testTarget>
 <useIncrementalCompilation default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
  <verbose default-value="false">${maven.compiler.verbose}</verbose>

Ich löste das Problem nach vielen Suchen und Versuchen, indem ich den Java-Compiler zwang, die gewünschte Quelle und das gewünschte Ziel zu verwenden:

<compilerArguments>
  <source>1.8</source>
  <target>1.8</target>
</compilerArguments>

Dadurch werden die beiden obigen Parameter zu javac hinzugefügt und der Standardwert überschrieben.

In meinem Fall funktioniert alles gut.

Nur eine Anmerkung: Ich sehe, dass Maven mit der obigen Konfiguration den Javac auf folgende Weise aufruft:

-d [...] -g -nowarn -target 1.6 -source 1.6 -encoding UTF-8 -source 1.8 -target 1.8

Die ersten beiden Parameter "-source" und "-target" sind die Standardparameter, die das maven-compiler-plugin verwendet. Das zweite Paar von Parametern sind die vom Plugin aufgrund der oben beschriebenen Konfiguration "compilerArguments" hinzugefügten Parameter. Es scheint, dass Javac nur die letzten Parameter verwendet (wenn ein Parameter mehrmals wiederholt wird, werden alle vorherigen Parameter überschrieben), aber ich bin nicht sicher, dass dies als Standard und "sicheres" Verhalten betrachtet werden kann.

Ich habe verschiedene Versionen von Maven-Compiler-Plugins verwendet, andere Versionen von Maven. Ich habe tief alle meine Konfigurationen eingecheckt (z. B. Systemvariablen, jedes einzelne Skript, das bei der Ausführung von Java oder Maven verwendet wird usw.), und ich bin sicher, dass alles in Ordnung ist. 

Es ist seltsam, aber meine Schlussfolgerung ist, dass im Java-Compiler-Plugin von Java 8 ein Fehler vorliegt.

5
Rick Deckard

Ich bin mir nicht sicher, aber Sie können versuchen, Ihre Version von maven.plugin zu aktualisieren

versuchen

<plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
            </configuration>
        <version>3.6.1</version>
</plugin>
2
joan

Wenn jemand Eclipse Kepler SR2 hat und beim Erstellen eines Projekts mit Maven ein Problem mit Java 1.8 hat, gehen Sie zum Eclipse Marketplace und suchen Sie nach dem Plugin Java 8-Unterstützung für m2e für Eclipse Kepler SR2 kompiliert Java 1.8 ohne Probleme.

0
DominikStyp