2013-05-21 11 views
7

otrzymuję ten błąd mvn -e package w Ubuntu 12.04:Dlaczego Maven próbuje skompilować mój kod jako -source 1.3?

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project HadoopSkeleton: Compilation failure: Compilation failure: 
[ERROR] /home/jesvin/dev/hadoop/HadoopMahoutSkeleton-master/src/main/java/HadoopSkeleton/App.java:[22,8] error: generics are not supported in -source 1.3 
[ERROR] 
[ERROR] (use -source 5 or higher to enable generics) 
[ERROR] /home/jesvin/dev/hadoop/HadoopMahoutSkeleton-master/src/main/java/HadoopSkeleton/App.java:[53,28] error: for-each loops are not supported in -source 1.3 
[ERROR] -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project HadoopSkeleton: Compilation failure 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
Caused by: org.apache.maven.plugin.CompilationFailureException: Compilation failure 
    at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:516) 
    at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    ... 19 more 
[ERROR] 
[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/MojoFailureException 

Więc myślę Maven jest zmuszony do kompilacji przeciwko starszej wersji Java. Ale czy to jest , dlaczego jest to? Chcę tylko konfiguracji maven, która buduje słoiki Mahout.

<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.11</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-core</artifactId> 
     <version>1.0.4</version> 
     <!-- or whatever version --> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.mahout</groupId> 
     <artifactId>mahout-core</artifactId> 
     <version>0.7</version> 
    </dependency> 
</dependencies> 

Staram się budować przez https://github.com/yeahiii/HadoopMahoutSkeleton/blob/master/pom.xml

java version "1.7.0_21" 
Java(TM) SE Runtime Environment (build 1.7.0_21-b11) 
Java HotSpot(TM) Server VM (build 23.21-b01, mixed mode) 
+0

Proszę użyć najnowszej wersji [wtyczka-kompilator: 3.1] (http://search.maven.org/#artifactdetails%7Corg.apache.maven.plugins%7Cmaven-compiler-plugin%7C3.1% 7Cmaven-plugin). Domyślnym '-source' będzie' 1.5' jako wzmianki [here] (http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#source). –

Odpowiedz

13

Zastosowanie Maven kompilatora plugin

<plugins> 
    <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
     </plugin> 
</plugins> 
+1

Prawdziwa odpowiedź, ale czy możesz wyjaśnić, dlaczego Maven wybiera wcześniejszą wersję? – aitchnyu

+0

Muszę przyznać, że wersja Java w wersji 1.3 jest naprawdę dziwna, ponieważ wtyczki kompilatora domyślnie mają wartość 1.5 od wersji 2 (a twoja jest 2.0.2) –

+0

Dlaczego moja odpowiedź była prawidłowa i próbowałem nawet wyjaśnić, co się stało (chociaż ja nie znam dokładnego powodu) –

1

This answer to a similar qestion może odpowiedzieć na oryginalne pytanie, dlaczego.

Cytując z tego postu:

Konfiguracja kompilatora Maven Plugin będzie rozwiązać problem. Okazuje się, że problem spowodował pakiet Maven3 w repozytorium Ubuntu . Alternatywną poprawką jest pobranie Maven 3 ze strony Apache , która używa bardziej aktualnej wtyczki Compiler.

Chciałem wiedzieć, dlaczego tak się dzieje, gdy dokumentacja podaje domyślne źródło Java to 1.5. Aby zobaczyć, co jest za pomocą mvn dla kompilatora użycia wtyczek:

pomocy mvn: efektywne-pom

My Maven Compiler 2.0.2 Plugin był chociaż używałem Maven 3.0.4 z pakietów Ubuntu. Kiedy uruchamiam to samo polecenie przy użyciu Mavena 3.0.4 z Apache, mam wtyczkę w wersji 2.3.2, która domyślnie jest zgodna z Java 1.5 zgodnie z oczekiwaniami.

Powiązane problemy