2012-11-08 169 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