Maven не может скомпилировать Java 1.8

Я пытаюсь использовать maven для создания банки, но я продолжаю получать сообщение об ошибке

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>

person Brian    schedule 15.01.2015    source источник
comment
Какой у вас JAVA_HOME?   -  person user944849    schedule 16.01.2015
comment
@Brian Один из ответов решил вашу проблему?   -  person MWiesner    schedule 28.04.2015


Ответы (8)


Maven полагается на установленную переменную среды JAVA_HOME. Установите его в соответствии с вашей ОС и перезапустите сборку.

Изменить: используйте экспорт, чтобы установить переменную.

export JAVA_HOME=/path/to/java
person JamesB    schedule 15.01.2015

Как пользователь 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.

person MWiesner    schedule 16.01.2015

Потому что Maven не знает версию jdk, которую вы хотите собрать. Вы можете попробовать с

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
person Luan Nguyen    schedule 08.06.2017
comment
Хотя этот код может дать ответ на вопрос, предоставление дополнительного контекста относительно того, как и/или почему он решает проблему, улучшит долгосрочную ценность ответа. Прочтите это как ответить. - person thewaywewere; 08.06.2017

вы можете попробовать настроить плагин компилятора. Он работает на моем локальном

      <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>
person Bharat Bhagat    schedule 09.09.2015

Я заметил, что кажется, что 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 два вышеуказанных параметра, перезаписывая значение по умолчанию.

В моем случае все работает хорошо.

Просто примечание: я вижу, что с приведенной выше конфигурацией maven вызывает javac следующим образом:

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

Первые два параметра "-source" и "-target" являются параметрами по умолчанию, которые использует плагин maven-compiler-plugin; вторая пара параметров — это параметры, добавленные плагином из-за конфигурации «compilerArguments», описанной выше. Кажется, что javac просто использует последнюю пару параметров (если параметр повторяется больше раз, последний перезаписывает все предыдущие), но я не уверен, что это можно считать стандартным и «верным» поведением.

Я использовал разные версии maven-compiler-plugin, разные версии maven. Я тщательно проверил все свои конфигурации (например, системные переменные, каждый отдельный скрипт, используемый при выполнении java или maven и т. д.), и я уверен, что все в порядке.

Странно, но мой вывод - баг в плагине maven-compiler-plugin с java 8.

person Rick Deckard    schedule 18.12.2015
comment
Я согласен, что должна быть ошибка. Я искал и искал и, наконец, нашел это, и даже это не работает для меня. Я думаю, что это проблема. Я не могу заставить maven правильно вызывать компилятор Java, даже с упомянутой вами конфигурацией компилятора. Что-то заставляет его использовать 1.5 в моей системе, и это очень расстраивает. - person Tim; 10.07.2018

Я не уверен, но можете ли вы попробовать обновить версию 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>
person joan    schedule 07.06.2017
comment
Я новичок в java/eclipse. Не подскажете, где это обновить? Есть ли файл настроек eclipse или что-то в этом роде? - person granadaCoder; 24.07.2018
comment
@granadaCoder - все в pom.xml :) - person joan; 14.08.2018

Если у кого-то есть Eclipse Kepler SR2 и есть проблема с Java 1.8 при создании проекта с помощью Maven, попробуйте перейти на Eclipse Marketplace и найти плагин под названием Поддержка Java 8 для m2e для Eclipse Kepler SR2, это помогло мне, и теперь Maven без проблем компилирует исходный код Java 1.8.

person DominikStyp    schedule 17.01.2016

Да, похоже, ошибка в плагине maven-compiler. Когда я обновился с 3.1 до 3.5.1, он работает.

person Joseph Tseng    schedule 06.04.2016
comment
Не знаю, что вы нашли, но мы пишем 2017 год, а версии 3.5.1 Maven до сих пор нет... - person Bartis Áron; 12.03.2017
comment
@BartisÁron, вы можете проверить версии, доступные для плагина maven-compiler: mvnrepository.com/artifact/org.apache.maven.plugins/ - person Stultuske; 16.11.2017
comment
Странный. Теперь я вижу эти версии. Не знаю, что я тогда увидел... - person Bartis Áron; 17.11.2017