問題タブ [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.
java - Java コンパイラ API NullPointerException
このコードを使用して、実行時に Java ファイルをコンパイルしています。まず、これが私のディレクトリ ツリーです (Eclipse の場合)。
NullPointerException を取得しているコードを次に示します (Eclipse で標準 VM として JDK を使用しようとしました)。
CustonJavaFileObject は次のとおりです。
私は何を間違っていますか?
編集:
PATH に JDK がありません (追加できません)
ここに私のスタックトレースがあります:
java - JavaCompilerでJavaをプログラムでコンパイルしますか?
別のスタック オーバーフロー スレッドからこの Java コードを取得しました
しかし、私はこのように NullPointerException を取得し続けます
コンパイルはしますが、実行時に例外をスローします。私は何を間違っていますか?
java - プログラムでJavaソースコードをメモリ内でのみコンパイルすることは可能ですか?
クラスを使用してJavaクラスをプログラムでコンパイルする方法を説明する多くのリファレンスを見つけましたJavaCompiler
。
ただし、プログラムで生成されたソースコードをコンパイルし(したがって、srcファイルを使用せずに)、出力ストリームにバイトコードを生成できる(ファイルシステムでクラスファイルを生成しない)オープンソースライブラリがあるかどうかを知りたいです。 )。
たとえば、私は次のようなものを書くことができることを探しています:
助けてくれてありがとう。
java - Java 実行間の Java Character IO
javax.tools.JavaCompiler
andを使用してjavax.tools.ToolProvider
、ユーザー入力文字列 (メソッドである必要があります) を事前定義されたクラスですべて大きな文字列内にラップし、コード内で実行しています。(同じコードで) コンパイルされたクラスを (実行時まで存在しないため) インスタンス化して、定義済みの一連のケースでその関数をテストする方法はありますか?
例: ユーザーは、引数として送信された反対のブール値を返すメソッドを作成するように求められます。
上記の方法でユーザーが入力します。
メソッドをジェネリック クラスでラップし、定義済みの一連のテスト ケース (true、false) を使用してその機能をチェックします (false、true を返す必要があります)。
eclipse - JAXBコンパイルエラー、afterUnmarshallの未使用パラメータ
Beanで使用void afterUnmarshal(Unmarshaller unmarshaller, Object parent)
していますが、パラメーターが使用されていない場合、コンパイラーが失敗するように設定されています。
パラメータにjavadocを持つスーパークラス/インターフェイスをオーバーライドすると、コンパイラは未使用のパラメータで問題ないようです。
しかし、afterUnmarshallメソッドをオーバーライドするクラスが見つかりません。この問題を解決するためのアンマーシャラーインターフェイスなどはありませんか?
java - 特定のスコープで一意の変数名を生成する方法はありますか?
が与えられた場合、一意の名前の変数宣言をスコープに挿入でき、結果のソース コード /がコンパイルScope
されるように、一意の変数名を生成できる関数はありますか?CompilationUnitTree
java - 式ツリーを評価順に訪問するための TreeVisitor はありますか?
Java コンパイラ ツリー API を使用するTreePath
と、 を使用して とその子のリーフ ツリーをトラバースできますTreeVisitor
。
TreeVisitor
評価順にすべての「ノード」を訪問する実装はありますか? たとえば、次のよう7 - 8 * 2 + 10
に解析された場合:
for に続いてfor 、次にforTreeVisitor
にアクセスするはありますか?BinaryTree
8 * 2
BinaryTree
7 - (8 * 2)
BinaryTree
(7 - (8 * 2)) + 10
blackberry - 異なるバージョンの異なるscetionsのコンパイル-Java
Eclipseを使用してさまざまなセクションのBlackBerryJavaコードをコンパイルする方法はありますか? BBバージョンOS6.0以降で使用可能なLocationInfoという名前のクラスがあります。
OS 5用にコンパイルしようとするとコンパイルエラーが発生します(LocationInfoが定義されていないため)が、OS 6用にコードをコンパイルすると、5ベースのデバイスに展開できなくなります。
コードベースをバージョン5にし、 Locationinfoのメソッドをサポートしたいと思います (6.0以降でのみ使用可能です)。セクションコンパイルは可能ですか、それとも回避策はありますか?
ありがとう
java-compiler-api - JavaコンパイラAPIを使用して複数のJavaファイルをコンパイルする
こんにちは私はJavaクラスの実行時に作成、コンパイル、ロードする必要があります。FTLを使用して、Javaソースファイルを作成しています。動的な依存関係がない場合は、ソースをコンパイルできます。
インスタンスを詳しく説明するために、2つのJavaソースファイル、1つのインターフェイスとその実装クラスがあります。次のようにJavaコンパイラAPIを使用してインターフェイスをコンパイルできます
すでにクラスパスにある静的クラスのクラスパスを設定しましたが、このアプローチは動的に作成されたクラスでは機能しませんか?カスタムクラスローダーで修正できますか?私の最終的な実装はウェブ/アプリサーバーになります
フィードバックは大歓迎です
Satheesh
java - 最良の選択?コンパイル前にバイトコード (asm) を編集するか、Java ファイルを編集します。
ゴール
- 変数と変数のコピーがどこで比較されているかを検出する
- 操作が発生した行の近くにコードを挿入する
- コードの目的: クラスが実行されるたびにカウンターを増加させる
汎用: 特定のパラメーターを使用した実行後に行われた比較とコピーの数をカウントします
2つのオプション
注:私は常に最初に.javaファイルを持っています
1) Java ファイルの編集
正規表現との比較を見つけ、行の近くにコードの断片を挿入してから、クラスをコンパイルします (私のアプリケーションは JavaCompiler を使用します)
2) ASM バイトコード エンジニアリングを使用する
また、追跡したいイベントの場所を検出し、バイトコードにピースを挿入してから、(すでにコンパイルされているが変更された)クラスを使用します
私の質問
最善/最もクリーンな方法は何ですか? これを行うより良い方法はありますか?