我正在运行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 template中,有一些基本逻辑用于渲染基元与对象不同,例如在第37行,p.nullable
被检查。 p
变量是AutoValueProcessor$Property
类的一个实例,如前面链接的第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版本pom.xml
的1.0-rc1
中,在jsr305依赖项中有一条评论“必须有处理器运行的地方”。 was removed发布后的依赖关系1.0-rc1
,因此将其添加到注释处理器工厂路径可能不需要版本1.0
。
有关在Eclipse中使用AutoValue的介绍,另请参阅this blog post。
您可能希望安装m2e-apt
插件,该插件根据pom.xml
依赖项处理自动注释处理:
https://marketplace.eclipse.org/content/m2e-apt
确保在项目首选项或全局部分中启用它:
Maven - >“注释处理” - >选择“自动配置JDT APT ...”