2012-11-08 133 views
11

当我在Netbeans中构建并运行我的程序时,它可以毫无问题地工作。但随着同pom.xml文件,当我尝试 “MVN编译” 我得到这个错误:Maven编译错误

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project hadoop-test: Compilation failure 
[ERROR] /home/metin/NetBeansProjects/hadoop-test/src/main/java/com/citusdata/hadoop/HadoopTest.java:[53,8] error: generics are not supported in -source 1.3 

我的Java版本不是1.3,这里的 “MVN -version”

Apache Maven 3.0.4 
Maven home: /usr/share/maven 
Java version: 1.7.0_03, vendor: Oracle Corporation 
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux", version: "3.2.0-27-generic", arch: "amd64", family: "unix" 

的结果,这是行53:

Token<BlockTokenIdentifier> token = locatedBlock.getBlockToken(); 
+0

你指定一个特定的编译器插件吗?你的朋友还有其他什么吗? – bluesman

回答

21

的问题是,在Maven2的maven-compiler-plugin默认使用-source 1.3target 1.3

您可以通过添加这种修复它您的POM:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
     <compilerVersion>1.5</compilerVersion> 
     <source>1.5</source> 
     <target>1.5</target> 
     </configuration> 
    </plugin> 

它的实用性将此放入pluginManagement节在最顶层父POM让你的派生劲歌并不需要关心这个。

+0

是的,这解决了我的问题,但为什么Netbeans mvn的作品? – metdos

+0

不确定,我不是NetBeans用户,但也许NB会添加一些属性(如'maven.compiler.source','maven.compiler.target')或强制更新版本的maven-compiler-plugin,它已经具有值为'1.5'作为默认值 - http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#source –

+1

我的maven版本是3.0.4。最终如何使用旧的maven-compiler-plugin? – metdos

5

你必须在你的pom.xml中添加一些信息。类似的东西:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
    </plugin> 
1

在你的日志中,我看到这一行:

generics are not supported in -source 1.3 

检查源和Maven编译器插件的目标配置,并更新到1.5。

0

看来你的Maven的Java主指向一个JRE不jdk的

Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre 

你必须将其更改为一个JDK。

尝试java -version,看看还有什么

使用/usr/sbin/alternatives --config java改变你的Java版本。

0

以下是修复Eclipse Indigo中相同错误的稍微不同的方法。

  • 在Eclipse中打开您的(maven)项目。
  • 上的pom.xml
  • 选择... Maven的右键单击...添加插件
  • 输入:

    - groupId: org.apache.maven.plugins 
        - artifactId: maven-compiler-plugin 
        - version: 2.3.2 
    

这将插入在你的pom.xml一个新的部分,打开一个窗口进行编辑。

然后,您可以按上面所述添加源和目标xml元素,以选择正确的JRE。

的部分看起来像这样在我的项目:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
      <source>1.6</source> 
      <target>1.6</target> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

注意额外的标签为“构建”和“插件”不存在于其他一些职位。

保存文件后,Eclipse会通知您,您的pom与您的项目不同步。

然后,您可以右键单击该项目...选择Maven..update项目

我的一个重要观点是,Maven将自动重新设置在Eclipse中构建路径。你可以通过Project验证...构建路径..配置构建路径...库。

实际上,这意味着如果您使用的是Maven项目,则不必在Eclipse中直接配置构建路径。

HTH