2011-10-19 68 views
7

在GWT 2.4.0和Guava GWT 10.0.1中是否支持Predicate s和Function?這兩個接口都標記爲@GwtCompatible使用Guava 10的GWT 2.4.0的謂詞和函數接口

當運行在調試託管模式的項目,我在Predicate用途收到運行時驗證錯誤:

[錯誤] [MyProject的 - 線XXY:進口javax.annotation.Nullable 解決不了

[錯誤] [MyProject的 - 線YYY:可空不能解析爲一個類型

從其他的StackOverflow職位,我認爲這些錯誤不應要求含在Guava版本09(包括路徑中的JSR 305沒有解決問題,無論如何)的路徑中填寫JSR 305。

我也出現成接收耦合界面的失配誤差:

[錯誤] [MyProject的] - 線XXX:類型新 功能(){}必須實現繼承抽象 方法Function.apply (對象)

[錯誤] [MyProject的] - 線路YYY:該方法適用類型新 函數(的MyType)(){}必須重寫或實現的超類型 方法

,和類似的錯誤在Predicate用途,這是我作爲一份錯誤:http://code.google.com/p/guava-libraries/issues/detail?id=765

任何想法,可能是什麼毛病我的設置?

項目 .gwt.xml文件包含以下行:

<inherits name="com.google.common.collect.Collect" /> 
<inherits name="com.google.common.base.Base" /> 

我的Java文件包括以下進口:

import com.google.common.base.Function; 
import com.google.common.base.Predicate; 

我使用Eclipse 3.7.1和JavaSE- 1.6

+1

你的webapp項目中包含哪個JAR? 'guava-10.0.1.jar'或'guava-gwt-10.0.1.jar'? – Strelok

+0

@Strelok:都在war/WEB-INF/lib和項目的構建路徑中(作爲非外部JAR) –

+0

函數和謂詞用於變換和過濾。檢查那些進口。我遇到了不匹配的方法問題,因爲Transform來自某個地方,而不是來自google.common。 –

回答

0

這是一種known bug你需要在你的WEB-INF/lib中有jsr305.jar 這就對了。

另一件需要注意的事實是,部分番石榴被捆綁在GWT * .jar中,但它們被放在單獨的包com.google.gwt.thirdparty.guava.common ..... 而且正如eclipse經常發生的那樣,當解析導入時,它會抓住錯誤的導入,並且在運行時導致混亂,因爲打包在com.google.gwt.thirdparty.guava中的類來自另一個版本,並且不能被引用。

我的建議是:

請在您的所有* .java文件文本搜索「第三方」子,並用正確的進口替代它 - 它爲我工作。

一個稍微深一點的解釋是,番石榴JSR305的早期版本中被列入番石榴罐子但這釋放前,他們拿出來,並在其上的依賴確實出現在lib的Maven的POM但無據可查上網站。這造成了用戶之間的混亂。

2

我剛剛有同樣的問題,並找到了解決辦法。問題是JSR 305源代碼不是GWT模塊的一部分,因此被GWT忽略。要修復它,請執行以下操作:

  • 將GWT模塊描述符添加到jsr305-2.0.0.jar。它應該包含的jar至少在子文件夾javax/annotation Java源代碼添加文件Annotation.gwt.xml有以下內容中:
<?xml version="1.0" encoding="UTF-8"?> 
<module> 
    <source path="" /> 
</module> 
  • 添加修改jsr305-2.0.0.jar到eclipse中的GWT項目的類路徑。雖然其他地方說,它是該電源線通過添加以下行來你模塊的.gwt.xml文件,這個jar添加到WEB-INF/lib

  • 讓你的項目的模塊從新創建的GWT模塊繼承:

<inherits name='javax.annotation.Annotation'/> 

就是這樣!現在你的eclipse項目會成功編譯,開發/託管模式也可以工作。