問題タブ [annotation-processing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4545 参照

java - コンパイル中に注釈プロセッサをステップデバッグする方法は?

保持ポリシー = SOURCE の注釈用の注釈プロセッサがあります。

ステップデバッグする方法がわかりません。

  • mvn install、compile、package、または ant javac を実行すると、印刷ステートメント、ロガー情報が発行され、コンパイル ログにそれらの sysout が表示されます。

  • ただし、Eclipse でプロセッサをステップ デバッグする方法がわかりません。つまり、コンパイル時にどのようにステップデバッグするのですか?

0 投票する
2 に答える
1865 参照

java - タイプ isAssignable と isSubtype の誤解

Java 6 API を使用して Annotation Processor を作成しているときに、すべてのマップを特定の方法で処理する必要があることに気付きましたが、API の目的や呼び出し方法を明らかに誤解しています。私を不幸にしているコードは次のとおりです。

それを考えると、これがその出力です:

これは、HashMap 要素が Map に割り当て可能であると予想される最初のブロックを除いて、私には完全に理にかなっています。また、HashMap は Map のサブタイプであると予想されます。

ここで何が欠けていますか?

0 投票する
2 に答える
7216 参照

java - Maven でのアノテーション プロセッサの出力

コンパイル中にコードを分析し、必要に応じて失敗させる方法として JSR 269 を使用しています。Maven でアノテーション プロセッサの出力を表示する際に問題があります (Ant は出力を表示します) javax.annotation.processing.Messager を使用して警告とエラーを表示していますが、maven では出力が表示されません。(ただし、実行されることはわかっています。コードを生成する必要があるためです)。何か案は?

0 投票する
2 に答える
3488 参照

java - APT ネストされたアノテーション付きクラスのアノテーションを処理する方法

Java を使用して注釈プロセッサを作成しようとしています。この注釈プロセッサは、以下に示すように、注釈付きクラス内の注釈付きネストされたクラスを識別する必要があります。最初にアノテーション付きクラスを処理してから、それらの内部アノテーションを処理します。これはコンパイル時に実行されるため、処理中のクラスに関する既存の知識はありません。Foo 内に複数のネストされたクラスを持つことができます。これらすべてのネストされたクラスの注釈を処理するにはどうすればよいですか。

処理中に、ネストされた Bar クラスにアクセスするにはどうすればよいですか? 次のコードは、クラス Foo に関する情報のみを出力します。バーに関する情報を処理するにはどうすればよいですか?

0 投票する
1 に答える
602 参照

configuration - 無視する注釈プロセッサをリストする maven-processor-plugin

maven-processor-plugin (またはその他のプラグイン) を使用して、スキップするものをリストする注釈プロセッサを実行する方法はありますか? 依存関係が使用する可能性のあるプロセッサをほとんど制御できませんが、スキップしたいプロセッサは知っています。

使用法ページの唯一のオプションは、含めたいものをリストすることですが、その逆はできません.

Mavenでこれを行う方法はありますか?

0 投票する
2 に答える
1530 参照

java - 注釈プロセッサのレベル Diagnostic.Kind.NOTE (およびその他) のメッセージ

2 つの Maven プロジェクトがあります。

  • 1 つ目は、アノテーションアノテーション プロセッサ、およびプロバイダ構成ファイルを定義して、ServiceLoader API を介してアノテーション プロセッサをトリガーします。
  • もう 1 つは最初のプロジェクトに依存し、いくつかのクラスとインターフェイスを定義します。そのうちの 1 つは、最初のプロジェクトで定義された注釈で注釈が付けられます。

mvn clean && mvn compileコンパイルが行われ、注釈処理が実行されることを確認するためだけに、(最初のプロジェクトをビルドしてインストールした後) で 2 番目のプロジェクトのビルドを呼び出します。期待どおりに動作します。単純な注釈プロセッサは、target/classes/ダミー データを含むディレクトリにリソース ファイルを生成するだけです。

を使用して情報を出力しようとするとprocessingEnv.getMessager().printMessage(...)、問題が発生し始めました。を使用Diagnostic.Kind.ERRORすると、予想どおり、ビルドが停止し、メッセージが出力されます。ただし、それ以外Kind(NOTEまたは などWARNING) では、メッセージは画面に書き込まれません

私の環境に関するいくつかの情報:

どこのバージョンも明示的に宣言していないmaven-compiler-pluginので、デフォルトのバージョン (2.3.2? わかりません) を使用しているに違いありません。

Kindこのセットアップですべてのメッセージの出力を有効にするにはどうすればよいですか? (つまり、maven を介して注釈プロセッサを起動する)

0 投票する
2 に答える
461 参照

maven - 依存関係に関する Maven、NetBeans プラットフォーム、ラッパー モジュール、および注釈プロセッサ

Maven NetBeans プラットフォーム アプリケーションがあります。そのモジュールの 1 つは、ルックアップにいくつかのサービスを公開する Java プロジェクト (jar) のラッパーです。ラップされたプロジェクトでは、maven-processor-plugin を使用して注釈を処理し、すべてがルックアップに登録されるようにします。ラップされたモジュールで公開されたクラスを確認できません。maven-processor-plugin を実行しようとしましたが、ラップされたモジュールにソース ファイルがないためスキップされます。あったとしても、問題は解決しません。

コードは、Marauroa Server Manager プロジェクトのモジュール: jWrestling Wrapper で取得できます

ラップされたモジュールのコードは、ここにあります。モジュール内の注釈付きクラスは正常に動作します。

プロジェクトの依存関係で注釈プロセッサを実行する方法はありますか? 明らかな何かが欠けていますか?

0 投票する
1 に答える
341 参照

java - AnnotationProcessor 内の javac オプションにアクセスする

カスタム AnnotationProcessor を作成しており、実行中に javac に設定されたオプションにアクセスする必要があります: -verbose、-s、-d など

これを行う正しい方法は何ですか。「sun.java.command」システム プロパティの解析や com.sun.tools.javac.util.Options へのアクセスは、これを行う良い方法だとは思いません。

どうもありがとう。

PS: -s オプションの場合は次のようになります。

0 投票する
0 に答える
401 参照

maven - Mavenで重複するクラスを作成するカスタム注釈プロセッサ

速度テンプレートを使用してクラスを生成するカスタム アノテーション プロセッサがあります。正常に動作しますが、コンパイル中にクラスが重複しないように、ビルドする前にプロジェクトをクリーンアップする必要があります。

ファイルが既に存在する場合は削除するように速度を設定しましたが、役に立ちません。これを回避するために特別に必要なものはありますか?

編集

ここでコードを見るか、ここでコードをチェックしてください

NetBeans ラッパー pom はこちらです。

0 投票する
2 に答える
3015 参照

java - 複数のソースファイルを使用して1つのファイルを作成するAnnotationProcessor

メソッドを持つ2つのクラスがあり、2つのクラスのメソッドを1つのクラスに結合したいと思います。

結果は次のようになります。

AnnotationProcessorを最初に実行すると、正しい出力が生成されます(RoundEnvironmentには両方のクラスが含まれているため)。

しかし、クラスの1つを編集した場合(たとえば、新しいメソッドを追加した場合)、RoundEnviromentには編集されたクラスのみが含まれるため、結果は次のようになります(インターフェイスITest1にnewMethod()を追加します)

現在、method2がありません。問題を解決する方法がわかりません。プロジェクト内のすべてのクラスにアクセスする方法(環境)はありますか?または、これを解決する別の方法はありますか?

クラスを生成するコードはかなり長いので、ここでクラスを生成する方法について簡単に説明します。要素を繰り返し処理してenv.getElementsAnnotatedWith(Service.class)メソッドを抽出し、次のコマンドを使用して新しいファイルに書き込みます。