4

m2e および m2e-apt プラグインに接続された Maven 3.1.1 を使用して Eclipse Kepler SR2 を実行していますが、解決方法がわからないというエラーが表示されます。

pom.xml で機能するために必要なすべての依存関係を見つけることができました@AutoValueが、現在、定義する必要があるメソッドがすべてプリミティブな戻り値の型を持っている場合にのみ機能する状態になっています。Objectまたはより具体的なものを返す抽象ゲッターを提供すると、次のエラーが発生します。

@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変数は class のインスタンスであり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は、クラス宣言の先頭で説明されているエラーを強調表示します。

4

2 に答える 2

5

Eclipse がアノテーション プロセッサを実行すると、依存関係com.google.code.findbugs:jsr305が失われているようです。プロジェクトのプロパティを開き、Java Compiler -> Annotation Processing -> Factory Path を参照し、[Add External JARs] をクリックしてから jsr305 JAR を選択して、追加してみてください。.m2コマンド ラインから maven を使用してプロジェクトをビルドした場合は、ディレクトリから JAR を選択できるはずです。

私のプロジェクトでのプロパティは次のようになります (最初のエントリは Eclipse によって自動的に追加され、関連していないようです)。

プロジェクト プロパティのスクリーンショット

AutoValueのpom.xmlバージョン1.0-rc1では、jsr305 の依存関係に「プロセッサが実行される場所でこれを持っている必要があります」というコメントがあります。依存関係はのリリース後に削除され1.0-rc1たため、バージョン ではおそらくアノテーション プロセッサ ファクトリ パスに追加する必要はありません1.0

Eclipse で AutoValue を使用するための概要については、このブログ投稿も参照してください。

于 2014-09-04T12:31:14.590 に答える