問題タブ [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 投票する
1 に答える
873 参照

java - Java コンパイラ API NullPointerException

このコードを使用して、実行時に Java ファイルをコンパイルしています。まず、これが私のディレクトリ ツリーです (Eclipse の場合)。

NullPointerException を取得しているコードを次に示します (Eclipse で標準 VM として JDK を使用しようとしました)。

CustonJavaFileObject は次のとおりです。

私は何を間違っていますか?

編集:

PATH に JDK がありません (追加できません)

ここに私のスタックトレースがあります:

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

java - JavaCompilerでJavaをプログラムでコンパイルしますか?

別のスタック オーバーフロー スレッドからこの Java コードを取得しました

しかし、私はこのように NullPointerException を取得し続けます

コンパイルはしますが、実行時に例外をスローします。私は何を間違っていますか?

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

java - プログラムでJavaソースコードをメモリ内でのみコンパイルすることは可能ですか?

クラスを使用してJavaクラスをプログラムでコンパイルする方法を説明する多くのリファレンスを見つけましたJavaCompiler

ただし、プログラムで生成されたソースコードをコンパイルし(したがって、srcファイルを使用せずに)、出力ストリームにバイトコードを生成できる(ファイルシステムでクラスファイルを生成しない)オープンソースライブラリがあるかどうかを知りたいです。 )。

たとえば、私は次のようなものを書くことができることを探しています:

助けてくれてありがとう。

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

java - Java 実行間の Java Character IO

javax.tools.JavaCompilerandを使用してjavax.tools.ToolProvider、ユーザー入力文字列 (メソッドである必要があります) を事前定義されたクラスですべて大きな文字列内にラップし、コード内で実行しています。(同じコードで) コンパイルされたクラスを (実行時まで存在しないため) インスタンス化して、定義済みの一連のケースでその関数をテストする方法はありますか?

例: ユーザーは、引数として送信された反対のブール値を返すメソッドを作成するように求められます。

上記の方法でユーザーが入力します。

メソッドをジェネリック クラスでラップし、定義済みの一連のテスト ケース (true、false) を使用してその機能をチェックします (false、true を返す必要があります)。

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

eclipse - JAXBコンパイルエラー、afterUnmarshallの未使用パラメータ

Beanで使用void afterUnmarshal(Unmarshaller unmarshaller, Object parent)していますが、パラメーターが使用されていない場合、コンパイラーが失敗するように設定されています。

パラメータにjavadocを持つスーパークラス/インターフェイスをオーバーライドすると、コンパイラは未使用のパラメータで問題ないようです。

しかし、afterUnmarshallメソッドをオーバーライドするクラスが見つかりません。この問題を解決するためのアンマーシャラーインターフェイスなどはありませんか?

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

java - 特定のスコープで一意の変数名を生成する方法はありますか?

が与えられた場合、一意の名前の変数宣言をスコープに挿入でき、結果のソース コード /がコンパイルScopeされるように、一意の変数名を生成できる関数はありますか?CompilationUnitTree

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

java - 式ツリーを評価順に訪問するための TreeVisitor はありますか?

Java コンパイラ ツリー API を使用するTreePathと、 を使用して とその子のリーフ ツリーをトラバースできますTreeVisitor

TreeVisitor評価順にすべての「ノード」を訪問する実装はありますか? たとえば、次のよう7 - 8 * 2 + 10に解析された場合:

for に続いてfor 、次にforTreeVisitorにアクセスするはありますか?BinaryTree8 * 2BinaryTree7 - (8 * 2)BinaryTree(7 - (8 * 2)) + 10

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

blackberry - 異なるバージョンの異なるscetionsのコンパイル-Java

Eclipseを使用してさまざまなセクションのBlackBerryJavaコードをコンパイルする方法はありますか? BBバージョンOS6.0以降で使用可能なLocationInfoという名前のクラスがあります。

OS 5用にコンパイルしようとするとコンパイルエラーが発生します(LocationInfoが定義されていないため)が、OS 6用にコードをコンパイルすると、5ベースのデバイスに展開できなくなります。

コードベースをバージョン5にし、 Locationinfoのメソッドをサポートしたいと思います (6.0以降でのみ使用可能です)。セクションコンパイルは可能ですか、それとも回避策はありますか?

ありがとう

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

java-compiler-api - JavaコンパイラAPIを使用して複数のJavaファイルをコンパイルする

こんにちは私はJavaクラスの実行時に作成、コンパイル、ロードする必要があります。FTLを使用して、Javaソースファイルを作成しています。動的な依存関係がない場合は、ソースをコンパイルできます。

インスタンスを詳しく説明するために、2つのJavaソースファイル、1つのインターフェイスとその実装クラスがあります。次のようにJavaコンパイラAPIを使用してインターフェイスをコンパイルできます

すでにクラスパスにある静的クラスのクラスパスを設定しましたが、このアプローチは動的に作成されたクラスでは機能しませんか?カスタムクラスローダーで修正できますか?私の最終的な実装はウェブ/アプリサーバーになります

フィードバックは大歓迎です

Satheesh

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

java - 最良の選択?コンパイル前にバイトコード (asm) を編集するか、Java ファイルを編集します。

ゴール

  • 変数と変数のコピーがどこで比較されているかを検出する
  • 操作が発生した行の近くにコードを挿入する
  • コードの目的: クラスが実行されるたびにカウンターを増加させる

汎用: 特定のパラメーターを使用した実行後に行われた比較とコピーの数をカウントします

2つのオプション

注:私は常に最初に.javaファイルを持っています

1) Java ファイルの編集


正規表現との比較を見つけ、行の近くにコードの断片を挿入してから、クラスをコンパイルします (私のアプリケーションは JavaCompiler を使用します)

2) ASM バイトコード エンジニアリングを使用する


また、追跡したいイベントの場所を検出し、バイトコードにピースを挿入してから、(すでにコンパイルされているが変更された)クラスを使用します

私の質問

最善/最もクリーンな方法は何ですか? これを行うより良い方法はありますか?