2015-01-15 43 views
12

Próbuję użyć maven zbudować słoik ale wciąż otrzymuję BłądMaven nie można skompilować Javy 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 

mvn -v wyjść

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" 

tak wygląda jej wskazując na 1.6jdk

ale mam 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> 
+4

Jaki jest twój JAVA_HOME? – user944849

+0

@Brian Czy jedna z odpowiedzi rozwiązała twój problem? – MWiesner

Odpowiedz

13

Maven opiera się na zmiennej środowiskowej JAVA_HOME jest ustawiony. Ustaw go zgodnie z systemem operacyjnym i ponownie uruchom swoją kompilację.

Edytuj: Użyj eksportu, aby ustawić zmienną.

export JAVA_HOME=/path/to/java 
9

Jako użytkownik MacOS, otwórz Terminal i utworzyć lub edytować plik .bash_profile (w katalogu domu użytkownika) i umieścić następujący fragment tam:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8` 

Zapisz tego pliku i ponownym otwarciu instancja terminala. Jeśli wykonasz tam polecenie export, powinieneś zobaczyć poprawną JAVA_HOME z lokalizacją instalacji JDK 8. Zrestartuj IDE później, a maven powinien być w stanie zbudować ładny kod Javy target 1.8.

7

możesz wypróbować konfigurację wtyczki kompilatora. Jego działanie na moim lokalnym

 <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

zauważyłem, że wydaje się, że maven-compiler-plugin ignoruje konfiguracje

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

W rzeczywistości, budowanie mojego projektu z opcją -x Maven męska, widzę, że w konfiguracja kompilatora maven-plugin źródło i cel zostały zmuszone do 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> 

i rozwiązać problem po o wiele poszukiwań i prób, zmuszając kompilator javy do używania Żądane źródło i miejsce docelowe:

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

Dodaje to parametry javac do dwóch powyższych parametrów, zastępując domyślne.

W moim przypadku wszystko działa dobrze.

Tylko uwaga: Widzę, że z powyższej konfiguracji Maven nazywa javac w ten sposób:

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

Pierwsze dwa „-source” i „-target” parametry są parametrami domyślnymi, że maven-compiler-plugin używa; druga para parametrów to parametry dodane przez wtyczkę z powodu konfiguracji "compilerArguments" opisanej powyżej.Wygląda na to, że javac używa tylko ostatnich paru parametrów (jeśli parametr jest powtarzany więcej razy, ostatni zastępuje wszystkie poprzednie), ale nie jestem pewien, czy można to uznać za standardowe i "pewne" zachowanie.

Użyłem różnych wersji wtyczki maven-compiler, innej wersji maven. Sprawdziłem głęboko wszystkie moje konfiguracje (np. Zmienne systemowe, każdy pojedynczy skrypt użyty w wykonaniu java lub maven itd.) I jestem pewien, że wszystko jest w porządku.

To dziwne, ale mój wniosek jest taki, że jest to błąd w maven-compiler-plugin z java 8.

0

Jeśli ktoś ma Eclipse Kepler SR2 i ma problem z Java 1.8 podczas budowania projektu z Maven, spróbuj przejść do Eclipse Marketplace i wyszukaj wtyczkę o nazwie Obsługa Java 8 dla m2e dla Eclipse Kepler SR2 pomogło mi to, a teraz Maven kompiluje źródło Java 1.8 bez problemu.

-1

Tak, wydaje się, że błąd w wtyczce maven-compiler. Po aktualizacji z wersji 3.1 na 3.5.1 działa.

+0

Nie wiem co znalazłeś, ale piszemy w 2017 i wciąż nie ma wersji 3.5.1 Maven ... –

+0

@ BartisÁron możesz sprawdzić wersje dostępne dla wtyczki kompilatora: https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin – Stultuske

+0

Dziwne. Teraz widzę te wersje. Nie wiem, co wtedy widziałem ... –

2

Nie jestem pewien, ale można spróbować zaktualizować swoją wersję maven.plugin

spróbować

<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

Ponieważ Maven nie wie wersję JDK chcesz zbudować. Możesz spróbować z

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

Podczas gdy ten kod może odpowiedzieć na pytanie, zapewniając dodatkowy kontekst dotyczący tego, jak i/lub dlaczego rozwiązuje problem, poprawiłoby to długoterminową wartość odpowiedzi. Przeczytaj ten [jak-odpowiedź] (http://stackoverflow.com/help/how-to-answer). – thewaywewere