java - Eclipse AutoValue 类无法构建

标签 java eclipse maven velocity auto-value

我正在运行 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、重建项目……没有成功。所以我深入研究了源代码,发现了一个差异,我不确定它是如何解决的。

Velocity template对于生成的 AutoValue 类,有一些基本逻辑用于渲染图元而不是对象,例如在第 37 行,检查了 p.nullablep 变量是 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 下突出显示所描述的错误。

最佳答案

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

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

Screenshot of project properties

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

另见 this blog post了解如何将 AutoValue 与 Eclipse 结合使用。

关于java - Eclipse AutoValue 类无法构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24844399/

相关文章:

java - 创建图像的可点击按钮

java - 搭建 Java + svn + Eclipse+ Tomcat , 使用 docker 开发环境

java - 在本地 JBoss 服务器上调试时看不到源代码

maven - 无法从命令行访问 mvn 命令?

maven - 最佳实践 `mvn install`,多模块项目,运行一个子模块

maven - mvnrepository.com 上的图标和标签

java - Thymeleaf 未加载 css 和 js

java - 因为 Admob 插页式广告不会显示?

java - 新闻ML : sample examples of NewsML

android - 如何使用 JSCH 连接到 SSH 服务器?