問題タブ [java-compiler-api]

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 に答える
12026 参照

java - 注釈プロセッサ - 処理中のクラスを取得する方法

カスタム Antoation プロセッサを作成しようとしています。アノテーション プロセッサはコンパイル時に各クラス ファイルを処理してアノテーションをチェックしますが、現在処理中のクラスを取得するにはどうすればよいでしょうか。次のコードでのみクラス名を取得できます。

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

java - 文字列から Java コードをコンパイルすると ClassNotFoundException が発生する

javax.tools を使用して文字列内のコードをコンパイルするコード例を試しています。Class.forName は ClassNotFoundException になります。理由を知っている人はいますか?私はJava 7を使用しています。

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

java - コンパイラ API を使用した Java プロジェクトのコンパイル

Compiler API を使用して、Java プロジェクト全体を動的にコンパイルしようとしています。これを達成するための私の最初の考えは、最初にコマンドラインを使用して1行でコンパイルする方法を知ってから、コンパイラオブジェクトに同じ原則/パラメータを適用することです. 問題は、CLI を使用してコンパイルしたことはありません。(IDEを使うデメリット?笑)

それで、私は正しい軌道に乗っていますか?また、プロジェクトのコンパイルは1行の実行で実現できますか? これはプロジェクトであり、豊富なパッケージが含まれているため、これを理解するのに苦労しています。

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

annotation-processing - コンパイラ API + 注釈処理 == double 診断メッセージ?

Java Compiler API (JSR199) とカスタム注釈プロセッサ (JSR269) を組み合わせています。コンパイラに提供される Java ソース コードの一部の構文エラーにより、診断メッセージが 2 回表示されます。多くの構文エラーは、依然として 1 つの診断メッセージのみを引き起こします。たとえば、不一致の中括弧は 1 つのメッセージのみを生成しますが、修飾識別子が無効なインポートは 2 つの診断メッセージを生成しますが、これは注釈プロセッサが使用されている場合のみです。

問題の原因となるサンプル入力を次に示します。

注釈プロセッサの場合、次のものがあります。(プロセスから false を返すことを試みました。また、AbstractProcessor を拡張する代わりに、Processor を手動で実装しようとしました。)

コンパイラを呼び出して注釈プロセッサを追加するために使用されるコードの一部を次に示します。

私の出力は次のようになります。

行を取り出すとprocessors.add(ap);、重複したエラー メッセージが消えます。複数のプロセッサを追加しても、追加の効果はありません。

コンパイラ API を使用しているときに、注釈プロセッサが重複した診断メッセージを引き起こす理由は何ですか? (そして、そのときのいくつかの構文エラーの場合のみ)

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

java - コンパイラーによって呼び出されないカスタム JavaFileManager の getJavaFileForOutput(...) メソッド

次のようなカスタム JavaFileManager があります。

読みやすくするために、多くのコードを編集しました。このクラスは、list(...) メソッドと inferBinaryName(...) メソッドも実装しています。

私のプロジェクトの別の領域では、次のようなものを実行します。

windows/mac/linux の eclipse でいくつかの junit テストを実行すると、期待どおりに動作します。Windows 上のグラスフィッシュでプロジェクトを実行すると、期待どおりに動作します。Mac OS X Mavericks または Centos 6.4 の Glassfish で同じプロジェクトを実行すると、getJavaFileForOutput(...) が呼び出されることはありません。私のファイルマネージャーの getClassLoader(...) メソッドは最終的に呼び出されますが、それまでには手遅れです。

getJavaFileForOuput メソッドの呼び出しを妨げている Linux+glassfish 環境の特徴は何ですか?

すべての環境が同じ jdk バージョン (jdk1.7.0_45) を使用するように正しく設定されていると確信しています。

何かアドバイス??

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

java - バイナリ/バイト コード レベルで 2 つの Jar を比較するために使用できるツールはありますか?

アイデアは、2 つの jar を比較し、それらが同じソースから生成されたかどうかを確認し、バイナリ/バイト コード レベルで同一かどうかを比較することです。また、両方が同じコンパイラ、つまりEclipse JDTまたはJITなどのコンパイラでコンパイルされている場合。

私はApache Common BCELを見てきましたが、元のバイトコードをソースコードに分解した後にのみ比較を行い、それをdiffツールのように比較します。これはテキストを行ごとに比較しますが、私が望むのは、ソースコードに分解/再配置せずにバイトコードを比較してから比較することです。

私は、ストレートなバイナリ/バイト コード比較をどのように比較できるかを調べていました!!!!

無料のツール/API の推奨事項は良いでしょう :) Ta