Eclipse AutoValue类无法构建

时间:2014-07-19 19:57:01

标签: 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,重建了项目......没有骰子。所以我深入研究了源代码,发现了一个差异,我不确定它是如何解决的。

在生成的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下描述的错误。

2 个答案:

答案 0 :(得分:5)

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

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

Screenshot of project properties

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

另请参阅this blog post,了解如何在Eclipse中使用AutoValue。

答案 1 :(得分:1)

您可能需要安装 // Get the HTTP Header Request for CryptoCompare API var request = new XMLHttpRequest(); request.onreadystatechange = function () { if (request.readyState === 4) { if (request.status === 200) { document.body.className = 'ok'; console.log(request.responseText); // This is the outcome of the curreny value } else if (!isValid(this.response) && this.status == 0) { document.body.className = 'error offline'; console.log("The computer appears to be offline."); } else { document.body.className = 'error'; } } }; request.open("GET", 'https://min-api.cryptocompare.com/data/price?fsym=XRP&tsyms=USD' , true); request.send(null); // Putting the outcome of the HTTP request into a Variable var XRPUSD = request.responseText; // This it to integrate it with the index.html // console.log(XRPUSD); document.getElementById("pbf-main-container").innerHTML = XRPUSD; 插件,该插件根据m2e-apt依赖项处理自动注释处理:

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

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

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

详细信息herehere