web-dev-qa-db-ja.com

MavenはコンパイルできませんJava 1.8

私はMavenを使用してjarを作成しようとしていますが、エラーが発生し続けます

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の出力

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"

だから、1.6jdkを指しているように見えます

しかし、私は1.8 jdkを持っています

Javaバージョン

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>
15
Brian

Mavenは、設定されているJava_HOME環境変数に依存しています。 OSに従って設定し、ビルドを再実行します。

編集:エクスポートを使用して変数を設定します。

export Java_HOME=/path/to/Java
14
JamesB

MacOSユーザーとして、Terminalを開き、ファイルを作成または編集します.bash_profile(ユーザーのホームディレクトリ内)に次のスニペットを配置します:

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

そのファイルを保存し、ターミナルインスタンスを再度開きます。そこでexportをコマンドとして実行すると、有効なJava_HOME JDK 8インストールの場所。 IDEを再起動すると、mavenがあなたを構築できるはずですJava target 1.8コード。

11
MWiesner

コンパイラプラグインで設定を試すことができます。私の地元の仕事

      <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

Mavenはビルドしたいjdkのバージョンを知らないためです。で試すことができます

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

Maven-compiler-pluginが構成を無視しているように見えることに気付きました

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

実際、-X mavenのオプションを使用してプロジェクトをビルドすると、maven-compiler-pluginの構成でソースとターゲットが強制的に1.6になっていることがわかります。

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

Javaコンパイラーに目的のソースとターゲットを使用させることにより、多くの検索と試行の後に問題を解決しました。

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

これにより、javacのパラメーターに上記の2つのパラメーターが追加され、デフォルトが上書きされます。

私の場合、すべてうまくいきます。

注:上記の構成では、mavenは次のようにjavacを呼び出します。

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

最初の2つの「-source」および「-target」パラメーターは、maven-compiler-pluginが使用するデフォルトのパラメーターです。 2番目のパラメーターは、上記の「compilerArguments」の構成のためにプラグインによって追加されたパラメーターです。 javacは最後の数個のパラメーターのみを使用しているように見えます(パラメーターがさらに繰り返される場合、最後のパラメーターがすべての前のパラメーターを上書きします)。

異なるバージョンのmaven-compiler-plugin、異なるバージョンのmavenを使用しました。すべての設定(たとえば、システム変数、Javaまたはmavenなど)の実行に使用されるすべてのスクリプト)を詳細にチェックインしましたが、すべては大丈夫だと確信しています。

奇妙ですが、私の結論は、maven-compiler-pluginにJava 8。

5
Rick Deckard

よくわかりませんが、maven.pluginバージョンを更新してみてください

試してみる

<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

誰かがEclipse Kepler SR2を使用していて、MavenでプロジェクトをビルドしているときにJava 1.8の問題がある場合は、Eclipse MarketplaceにアクセスしてEclipseのm2eのJava 8サポートを検索してくださいKepler SR2これは私を助け、Mavenは問題なくコンパイルできますJava 1.8ソース。

0
DominikStyp