2014-06-10 86 views
2

我有幾個重寫方法是這樣的:@Override不是在Maven項目工作

@Override 
public int compareTo(Property p) { 
    return getText().compareTo(p.getText()); 
} 

作爲一個Java項目,它工作正常,但作爲Maven項目,它返回以下錯誤:

The method compareTo(Property) of type Property must override a superclass method 

經過研究,我想我應該在我的POM文件中包含我的JRE系統庫(jdk1.6_u25)作爲依賴項,或者這是一個完全不同的問題嗎?

非常感謝。

+0

您不應該需要將JDK添加爲依賴項。你能否證實你的班正在實施「可比較的」? – Will

+0

像這樣設置JDK版本不起作用;如果要設置源版本和目標版本,請按http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html中的說明操作。但是,這是可能*不是*這裏的問題。 – blalasaadri

+0

@是的,班上正在實施「可比較的」。 – Kurtiss

回答

2

謝謝大家對您的意見,很多你說,Maven的使用了Java 5默認情況下,可能是問題的原因,並作爲一個結果,我可以通過這個答案,以確定問題:

Why is javac failing on @Override annotation

的JDK編譯器的合規性水平設定爲1.5默認;一旦我將它設置爲1.6,錯誤被刪除。

非常感謝。

3

compareTo是一種通用方法。泛型沒有使用,所以compareTo(Object)是唯一可以覆蓋的方法。

請檢查:

  1. Maven使用Java的編譯支持泛型。
  2. 源代碼級爲> = 5

執行mvn -V看什麼版本的Java行家的使用進行編譯。

問候

+0

Apache Maven 3.2.1,Java版本1.6.0_25 – Kurtiss

+0

@Kurtiss是否通過命令行通過命令行執行'mvn -V'命令行,或者您是否使用maven-eclipse-integration來執行任何命令?注意它可能會有所作爲。 –

+0

通過命令提示符得到了這個信息,反正沒關係我已經發現問題是什麼,並將它作爲答案發布。感謝您的幫助。 – Kurtiss

6

您不需要再依賴。但默認情況下,maven使用Java 5語言級別,其中@Override不允許實現接口方法。那是在6

介紹所以你必須配置編譯器插件使用的語言水平6這樣的:

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

感謝您的及時回覆,我已複製並粘貼您的代碼,並返回'託管版本無法確定。受管理的定義位置無法確定,可能由「導入」範圍的依賴關係來定義。「非常感謝。 – Kurtiss

+0

我從來沒有見過。嘗試在「」部分中添加「 3.1」。 – Ray

+0

沒關係我已經找出問題所在,並將其作爲答案發布。感謝您的幫助。 – Kurtiss