我正在运行带有 m2e 和 m2e-apt 插件的 Maven 3.1.1 的 Eclipse Kepler SR2,但我遇到了一个我不知道如何解决的错误。
我设法找到了@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.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();
}
EclipsePoint
在类声明的开头突出显示描述的错误。