2014-07-19 70 views
3

我正在運行Eclipse Kepler SR2,Maven 3.1.1附有m2e和m2e-apt插件,並且出現一個我不知道如何解決的錯誤。Eclipse AutoValue類無法生成

我設法找到所有依賴關係,以便@AutoValue工作到我的pom.xml中,但現在我處於只在需要定義的方法全部具有原始返回類型時才起作用的狀態。如果我提供了一個抽象的getter返回一個Object或更具體的,我得到這個錯誤:

@AutoValue processor threw an exception: 
    java.lang.IllegalArgumentException: 
    Failed to invoke com.google.auto.value.processor.AutoValueProcessor$Property.nullable() on getObject... 

我已經試過了基礎 - 清除緩存行家,重新啓動Eclipse中,重建項目...沒有骰子。所以我深入瞭解了源代碼,發現了一個不一致的地方,我不確定它是如何解決的。

在生成的AutoValue類的Velocity template中,存在一些基本邏輯,用於以不同於對象的方式呈現基元,例如在第37行上,檢查p.nullablep變量是AutoValueProcessor$Property類的實例,其可以在前面的鏈接的第205行中看到,具有isNullable()方法,但沒有nullable方法或屬性。

速度渲染階段是如何工作的呢?速度自動擴展p.nullablep.isNullable有些怎麼樣,但不是因爲我的原因?這是一個錯誤?我不知道該從這裏做什麼。


實施例類,沒有編譯:

@AutoValue 
public abstract class Point { 

    public static Point of(double x, double y) { 
    return new AutoValue_Point(x, y); 
    } 

    public abstract Double x(); 

    public abstract Double y(); 

} 

的Eclipse突出類聲明的頭部Point下所描述的錯誤。

+0

VTL擴展了對任何屬性或方法的引用,但我想知道這是否與您的問題有關。 getter方法是否返回一個可爲空的對象(例如,您是否使用@Nullable註釋它)?如果沒有,您的測試是否將其設置爲非空值? – pmorken

+0

@ pmorken在註解處理階段(AutoValueProcessor運行期間),錯誤不在測試中,因此在編譯時沒有運行時對象。我已經嘗試將getter設置爲'@ Nullable','@ NonNull',並且都沒有,但都產生相同的結果。 – torquestomp

+0

我按照[Autovalue Github頁面](https://github.com/google/auto/tree/master/value)上的說明創建了一個[示例應用程序](https://github.com/manish-in -java /谷歌-autovalue)。它運行良好。我已經從命令行(Maven 3.1.1),Eclipse Kepler(帶有m2e)和IDEA 13運行了這個示例。您可以提供類的代碼以及運行錯誤的字段嗎?當你從命令行運行Maven時,你的代碼是否工作? – manish

回答

3

當Eclipse運行註釋處理器時,似乎依賴項com.google.code.findbugs:jsr305丟失。嘗試通過打開項目屬性,瀏覽到Java Compiler - > Annotation Processing - > Factory Path,點擊「Add External JARs」,然後選擇jsr305 JAR來添加它。如果您使用命令行中的maven構建項目,則應該能夠從.m2目錄中選擇JAR。

下面是根據企業的性質是什麼樣子在我的項目(第一項由Eclipse的自動添加,似乎不相關):

Screenshot of project properties

pom.xml1.0-rc1 AutoValue的版本,在jsr305依賴項中有一個評論「必須有這個處理器運行的地方」。版本1.0-rc1發佈後的依賴關係was removed,因此將其添加到註釋處理器工廠路徑對於版本1.0可能不是必需的。

另請參閱this blog post瞭解如何在Eclipse中使用AutoValue。

0

你可能想安裝m2e-apt插件,它處理基礎上,pom.xml依賴自動標註處理:

https://marketplace.eclipse.org/content/m2e-apt

確保啓用它在你的部分項目的喜好或全局:

Maven - >「註釋處理」 - >選擇「自動配置JDT APT ...」

詳細信息herehere