2015-01-15 3 views
12

Я пытаюсь использовать Maven построить банку, но я получаю ошибкуMaven не может скомпилировать Java 1.8

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 

МВН -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> 
+4

Какой у вас JAVA_HOME? – user944849

+0

@Brian Один из ответов решил решить вашу проблему? – MWiesner

ответ

13

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

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

export JAVA_HOME=/path/to/java 
9

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

7

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

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

Я заметил, что, кажется, что Maven-компилятор-плагин игнорирует конфигурации

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

В самом деле, строить свой проект с опцией -x в Maven, я вижу, что в конфигурация Maven-компилятора-плагин источника и цели были вынуждены быть 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-компилятора-плагина с Java 8.

0

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

-1

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

+0

Я не знаю, что вы нашли, но мы пишем 2017 и до сих пор нет версии 3.5.1 из Maven ... –

+0

@ BartisÁron вы можете проверить версии, доступные для maven-compiler-plugin: https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin – Stultuske

+0

Странно. Теперь я вижу эти версии. Я не знаю, что я тогда видел ... –

2

Я не уверен, но вы можете попробовать, чтобы обновить версию 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> 
5

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

<properties> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
</properties> 
+0

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, как и/или почему он решает проблему, улучшить долгосрочную ценность ответа. Пожалуйста, прочтите это [как-ответ] (http://stackoverflow.com/help/how-to-answer). – thewaywewere

Смежные вопросы