Eclipse AutoValue类无法构建

我正在运行Eclipse Kepler SR2,Maven 3.1.1附带了m2e和m2e-apt插件,我收到一个错误,我不知道如何解决。

我设法找到使@AutoValue工作到我的pom.xml所需的所有依赖项,但现在我处于一种状态,只有当需要定义的方法都具有原始返回类型时它才有效。 如果我提供一个返回Object或更具体的抽象getter,我会收到此错误:

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

我已经尝试了基础知识 – 清除了maven缓存,重新启动了Eclipse,重建了项目……没有骰子。 所以我深入研究了源代码,发现了一个差异,我不确定它是如何解决的。

在生成的AutoValue类的Velocity模板中,有一些基本逻辑用于渲染基元,而不是对象,例如在第37行,检查p.nullablep变量是AutoValueProcessor$Property类的一个实例,可以isNullable()一个链接的第205行看到,它有一个isNullable()方法,但是没有nullable方法或属性。

那么Velocity呈现阶段是如何工作的呢? Velocity是否自动将p.nullable扩展为p.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下的描述错误。

当Eclipse运行注释处理器时,似乎缺少依赖项com.google.code.findbugs:jsr305 。 尝试通过打开项目属性,浏览到Java Compiler – > Annotation Processing – > Factory Path,单击“Add External JARs”然后选择jsr305 JAR来添加它。 如果您已从命令行使用maven构建项目,则应该能够从.m2目录中选择JAR。

以下是我的项目中的属性(第一个条目由Eclipse自动添加,似乎并不相关):

项目属性的屏幕截图

在AutoValue版本1.0-rc1pom.xml中,在jsr305依赖项中有一条注释“必须具有处理器运行的地方”。 在1.0-rc1发布后删除了依赖关系,因此在版本1.0可能不需要将其添加到注释处理器工厂路径。

有关在Eclipse中使用AutoValue的介绍,另请参阅此博客文章 。

您可能希望安装m2e-apt插件,该插件根据pom.xml依赖项处理自动注释处理:

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

确保在项目首选项或全局部分中启用它:

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

详细信息在这里和这里 。