4

我正在运行带有 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.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();

}

EclipsePoint在类声明的开头突出显示描述的错误。

4

2 回答 2

5

com.google.code.findbugs:jsr305当 Eclipse 运行注释处理器时,似乎缺少依赖项。尝试通过打开项目属性来添加它,浏览到 Java 编译器 -> 注释处理 -> 工厂路径,单击“添加外部 JAR”,然后选择 jsr305 JAR。如果您已经从命令行使用 maven 构建了项目,您应该能够从您的.m2目录中选择 JAR。

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

项目属性截图

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

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

于 2014-09-04T12:31:14.590 回答
3

您可能想要安装m2e-apt插件,它根据pom.xml依赖关系处理自动注释处理:

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

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

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

详细信息在这里这里

于 2018-01-01T01:15:45.407 回答