問題タブ [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.
java - コンパイル時に作成されたクラスが IntelliJ に存在しないと表示される
動機:
コンパイル時の注釈処理が私の問題に合うかどうか試してみたいと思います。そのままで動作する必要があり、コンパイラの引数などは必要ありません。
現在の状態:
私は持っている:
- 注釈
- 注釈プロセッサ
- これらの両方を含む .jar と、META-INF/services にプロセッサのFQCNを含む javax.annotation.processing.Processor ファイル
何が起こるべきか:
- プロセッサを自動検出する必要があります
- 注釈を処理し、新しいクラスを作成する必要があります (WiredAnnotated)
- このクラスをコンパイルの 1 つのステップで使用できるはずです (複数のフェーズではありません)。
- このクラスが生成されたことをエディターに受け入れてほしくない (たとえば、 AndroidAnnotationsもこれを管理する)
実際に何が起こるか:
- プロセッサを自動検出します
- 新しいクラスを作成します (in out/production/*/generated/)
- 私はこのクラスを使用することができます
- ソースコードは正しく見えます
- 逆コンパイルすると、それも問題ないように見えます
- エディターはクラスを解決できません (スクリーンショットを参照)
私が試したこと:
- IntelliJ の再起動
- キャッシュの無効化
- 注釈プロセッサの出力を確認しています
スクリーンショット:
コンパイルすると、実際に期待どおりに動作します。間違ったディレクトリの検査と関係があると思います。
私が間違っていることについて誰かが考え/手がかりを持っていますか? あなたが私を助けるのに役立つ情報を見逃しましたか?
前もってありがとう、ティル
android - Gradle + AndroidAnnotations が重複したクラス エラーを生成する - すべてのビルドの前にプロジェクトをクリーンアップする必要がある
Gradle ビルドを使用して IntelliJ IDEA プロジェクトを Android Studio に移行する際に問題があります。他のさまざまな投稿で推奨されているように AndroidAnnotations ライブラリをセットアップしましたが、問題なく動作します。しかし、:clean
間にタスクを実行せずにプロジェクトを複数回コンパイルすると、次のエラー メッセージが表示されます。
*_.java
AndroidAnnotations は常にタスクの前にファイルを再作成し:compile
(必要かどうかを確認せずに)、:compile
タスクは新しいファイルを認識しますが (タイムスタンプを使用するなど)、それらをプリコンパイル済み*.class
ファイルとして既に検出しているため、複数のビルドが連続して失敗すると思います。 、したがってエラーをスローします。これは可能ですか?この動作を防ぐにはどうすればよいですか? AndroidAnnotations の必要性チェックを追加できますか? それとも、これは別の問題ですか?
更新 1: AndroidAnnotations 自体からエラーがスローされたようです。これは、フォルダー内のファイルを手動で:compile
削除すると機能するためです。*.java
apt_generated
更新 2:
から次の行を削除しましたbuild.gradle
:
この行がないと機能する理由が正確にはわかりません。Android Studio のMark Directory as > Sources Root
. おそらくこれはキャッシングの結果ですか?または、gradle は生成された Java ファイルをクラスパスに自動的に追加しますか?
それにもかかわらず、コメントをいただければ幸いです。
アップデート 3 / ソリューション
行を削除し、gradle ビルド ファイルを Android Studio と同期した後、自動生成されたソース コードがソース ルートとして削除され、IDE に欠落しているクラスのエラーが表示されました。
最終的に、Android Annotations githubの問題に関する解決策を見つけました: https://github.com/excilys/androidannotations/issues/676
ソースセットに追加するためのステートメントを再度追加しました(Android Studioがソースルートとして表示できるようにします)。さらに、これを使用してバリアント ソース コレクションからファイルを削除しました。
生成されたファイルが認識されるようになり、クラスの重複エラーがなくなりました。
敬具、デビッド
これが私の最終的なbuild.gradleです。これがあなたの何人かを助けることを願っています:
これが私の(初期)ですbuild.gradle
(関連のない部分を取り除きました):
助けていただければ幸いです。
ありがとう、デビッド
java - android.os に依存する Java ライブラリを使用すると NoClassDefFoundError が発生する
android.os.Bundle を使用するプロジェクト (JavaLibrary と呼びます) で Java 注釈プロセッサを作成しました。そのため、プロジェクトの gradle.build 依存関係には次の行があります。
gradle.build ではsourceCompatibility
、targetCompatibility
両方ともバージョン 1.6 に設定されており、このプロジェクトは単独で問題なくコンパイルされます。
また、JavaLibrary に依存する Android ライブラリ プロジェクト (これを AndroidLibrary と呼びます) も作成しました。JavaLibrary が AndroidLibrary で使用されるいくつかの注釈を処理し、いくつかのコードを生成することを期待しています。
ただし、AndroidLibrary をコンパイルしようとすると、次のエラーが発生します。
スタック トレースは、Android.os.Bundle が JavaLibrary で参照されている行を示しています。
これはなぜですか? また、これら 2 つのプロジェクトを一緒にコンパイルするにはどうすればよいですか?
annotation-processing - コンパイラ API + 注釈処理 == double 診断メッセージ?
Java Compiler API (JSR199) とカスタム注釈プロセッサ (JSR269) を組み合わせています。コンパイラに提供される Java ソース コードの一部の構文エラーにより、診断メッセージが 2 回表示されます。多くの構文エラーは、依然として 1 つの診断メッセージのみを引き起こします。たとえば、不一致の中括弧は 1 つのメッセージのみを生成しますが、修飾識別子が無効なインポートは 2 つの診断メッセージを生成しますが、これは注釈プロセッサが使用されている場合のみです。
問題の原因となるサンプル入力を次に示します。
注釈プロセッサの場合、次のものがあります。(プロセスから false を返すことを試みました。また、AbstractProcessor を拡張する代わりに、Processor を手動で実装しようとしました。)
コンパイラを呼び出して注釈プロセッサを追加するために使用されるコードの一部を次に示します。
私の出力は次のようになります。
行を取り出すとprocessors.add(ap);
、重複したエラー メッセージが消えます。複数のプロセッサを追加しても、追加の効果はありません。
コンパイラ API を使用しているときに、注釈プロセッサが重複した診断メッセージを引き起こす理由は何ですか? (そして、そのときのいくつかの構文エラーの場合のみ)
android - Gradle + 注釈 + フレーバー = 注釈プロセッサを実行しません
アノテーション プロセッサ (Android Annotations) を使用してコードを生成する Gradle ビルド スクリプトがあります。新しいPro Flavorを追加するまで、ビルドは問題ありませんでした。Freeフレーバーをビルドできますが、 Proフレーバーをビルドすると、注釈プロセッサが実行されません。これにより、コードが欠落し、ビルドが失敗します。
これが私のスクリプトです:
無料のバリアントをビルドすると、gradle 出力で次のようにアノテーション プロセッサが実行されます。
Proバリアントをビルドすると、注釈プロセッサが実行されないため、生成されたコードへの参照が失敗します。
これについて興味深いのは、スクリプトから を削除すると、(本当に偶然に)packageName "com.MyCompany.MyApp.Pro"
注釈プロセッサが実行され、正しくビルドされることがわかったということです。Google Play のパッケージ名を更新する必要があります。
Androidスタジオを見ると、 FreeDebugビルドバリアントが選択されていても、apt(注釈処理ツール)がProバージョンをアクティブとして表示していることがわかります。これが問題を示しているのか、それともベータ android スタジオ (Android Studio バージョン: 0.2.13) の問題なのかはわかりません。だから、一粒の塩でそれを取ってください。
私はgradleビルドシステムは初めてですが、コツをつかんでいると思いました。スクリプトを何度も見直しましたが、Proバリアントで注釈プロセッサが実行されていない理由がわかりません。--info および --debug 引数を指定してラッパーを実行する以外に、これらの問題をデバッグする方法はまだわかりません。
-infoと-debugを指定して gradle ラッパーを実行して拡張出力を取得しましたが、生成されたコードの欠落が原因で発生したエラーに到達するまで、他のエラー (または項目の欠落) を示すものは何もありません。したがって、これは、根本的な問題であるそのバリアントでandroidannotationsが実行されていないという事実に過ぎないと私に信じさせます。(つまり、これは上流の何かによって引き起こされたエラーであり、後で誤って報告されたとは思いません。間違っている可能性もあります)
私は本当に途方に暮れており、これで2日間立ち往生しています。
java - アノテーション処理は呼び出されません
注釈から Java コードを生成する小さなライブラリに取り組んでいます。
私はそれをビルドするためにmavenを使用しますが、注釈を付けて、MyAnnotationで注釈が付けられたいくつかのクラスを持ついくつかの単体テストを作成しました。
私の pom.xml ファイルは次のようになります。
また、Eclipse で注釈付きクラスを使用してテストを実行しようとしました。ライブラリから jar を生成し、Eclipse で AnnotationProcessor として設定しました。ただし、アノテーション処理は実行されません。
私の知る限り、生成されたクラス ファイルは target/right に配置する必要がありますか、または生成された Java ファイルはどこに保存されますか?
何が間違っている可能性がありますか?