Ответ 1
Maven полагается на заданную переменную среды JAVA_HOME. Установите его в соответствии с вашей ОС и повторите запуск сборки.
Изменить: Используйте экспорт, чтобы установить переменную.
export JAVA_HOME=/path/to/java
Я пытаюсь использовать 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 -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>
Maven полагается на заданную переменную среды JAVA_HOME. Установите его в соответствии с вашей ОС и повторите запуск сборки.
Изменить: Используйте экспорт, чтобы установить переменную.
export JAVA_HOME=/path/to/java
Как пользователь 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
.
вы можете попробовать настроить в плагине компилятора. Его работа над моим местным
<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>
Потому что Maven не знает версию jdk, которую вы хотите создать. Вы можете попробовать
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Я заметил, что кажется, что maven-compiler-plugin игнорирует конфигурации
<source>1.8</source>
<target>1.8</target>
На самом деле, построив мой проект с опцией -X maven, я вижу, что в конфигурации плагина maven-compiler источник и цель были вынуждены быть 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-компилятор-плагин; вторая пара параметров - это параметры, добавленные плагином из-за описанной выше конфигурации "compilerArguments". Кажется, что javac просто использует последние пару параметров (если параметр повторяется больше времени, последний перезаписывает все предыдущие), но я не уверен, что это можно считать стандартным и "уверенным" поведением.
Я использовал разные версии maven-compiler-plugin, другую версию maven. Я проверил все мои конфигурации (например, системные переменные, каждый script, используемый при выполнении java или maven и т.д.), И я уверен, что все в порядке.
Странно, но я пришел к выводу, что в maven-компилятор-плагине есть ошибка в java 8.
Я не уверен, но вы можете попробовать обновить версию 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>
Если у кого-то есть Eclipse Kepler SR2 и проблема с Java 1.8 при построении проекта с Maven, попробуйте перейти на Eclipse Marketplace и найти плагин под названием Поддержка Java 8 для m2e для Eclipse Kepler SR2. помог мне, и теперь Maven компилирует источник Java 1.8 без проблем.
Да, это похоже на ошибку в maven-compiler-plugin. Когда я обновился с 3.1 до 3.5.1, он работает.