Eclipse AutoValue类无法生成

问题描述:

我正在运行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

当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。

你可能想安装m2e-apt插件,它处理基础上,pom.xml依赖自动标注处理:

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

确保启用它在你的部分项目的喜好或全局:

Maven - >“注释处理” - >选择“自动配置JDT APT ...”

详细信息herehere