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

java-compiler-api - ジェネリックをサポートする Java 動的コード生成

Java 動的コード生成を提供し、ジェネリックもサポートするツールはありますか?

たとえば、Javassist は私が必要とする種類のツールですが、ジェネリックをサポートしていません。

Java 6 Compiler API を使用する小さな lib を作成しましたが、私が知る限り、JDK に依存しています。別のコンパイラを指定する方法はありますか? それとも、Java Compiler API で呼び出す必要がある部分だけをアプリケーションに同梱するには?

0 投票する
4 に答える
1081 参照

java - 相互に依存するクラスを持つ Java コンパイラ API

Java Compiler API を使用してメモリ内クラスをコンパイルしています。つまり、クラスはバイトコードにコンパイルされ (ディスクに保存された .classes ファイルはありません)、バイトコードを再構築することによってロードされます。

場合によっては、メモリ内でコンパイルされた別のクラスに依存するクラスをコンパイルする必要があります。例: クラス A をコンパイルしてから、クラス A に依存するクラス B をコンパイルします。

これを解決するために、コンパイラ API の getTask メソッドで必要なコンパイル ユニットとしてクラス A とクラス B の両方を渡します。

ただし、既にコンパイルされているクラス A を再コンパイルする必要があるため、このソリューションは本当に好きではありません。

これを回避する方法はありますか?

編集: このリンクから解決策を見つけました: http://www.ibm.com/developerworks/java/library/j-jcomp/index.html

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

java - Java 内から Java コードを実行する

重複の可能性:
Java での eval の使用
外部ソース コードの読み込みと内部での使用 (再コンパイルなどによる)

関数が文字列(一部のソースコード)を受け取り、コンパイルして実行し、戻り値を返すように、Javaで「評価」をシミュレートしたいと思います。

JavaCompiler API を使用してコンパイルできることはわかっていますが、このようなコードを実際に実行する最善の方法がわかりません。Runtime.exec は、このタスクには重すぎると感じています... 「30+20」などを評価するためだけに、この「eval」関数を実行するたびに、別の Java プロセスを生成したくありません。これは遅く、リソースを大量に消費します。

最後に、これは任意の Java コードを実行できる必要があるため、Java 内のスクリプト言語エバリュエーターに依存することはできません (たとえば、入力が単に '30+20' よりも複雑な Java である場合)。

代替案はありますか?

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

java - Google app Engine で JavaCompiler を使用できますか?

JavaCompilerGoogle App Engine でJava ソース コンパイラを呼び出す方法はありますか?

(ホワイトリストにクラスが表示されなかったjavax.toolsので、残念ながら答えはノーです)

アップデート

JSP は明らかに Java コンパイラを必要とするサーブレットにコンパイルされるため、Java Server Pages が Google App Engine でどのように機能するのか疑問に思っています。

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

java - Java TreeCompiler APIを使用して識別子の型宣言を見つけるにはどうすればよいですか?

私は変数/識別子の名前、たとえば、、xおよびとJCCompilationUnitを持っていますScope。タイプを見つける方法はありxますか?

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

java - Google App Engine で Java クラスを動的にコンパイルする方法

この質問への回答で、Java コンパイラーをjavax.toolsGAE アプリから呼び出すことができないことを知りました。

  • この制限は引き続き適用されますか?

  • もしそうなら、Javaソースコードを「その場で」ロード可能なクラスファイルにコンパイルするための私のオプションは何ですか?

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

java - CompilationTaskによるコンパイルのソースを設定する方法

のソースファイルを設定する方法がわかりませんcompilationTask

私はこれを試しました:

しかし、次のエラーが発生します。

スレッド"main"の例外java.lang.IllegalArgumentException:有効なクラス名ではありません:src / Hello.java

もちろん、クラスの代わりにnullを指定すると、ソースファイルが指定されていないため、「ソースファイルがありません」というメッセージが表示されます。これまでのrun関数を使ってみJavaCompilerましたが、文字列引数でオプションを指定できませんでした(または方法がわかりません)。

解決策は次のとおりです。

0 投票する
4 に答える
2412 参照

classloader - メソッドが true を返すようにバイト コードを変更する

クラスファイルには次のようなメソッドがあります:

この検証メソッド内には多くのコードがありますが、常に true または false を返すようにしたいだけです。これを達成するためにクラスファイルを変更する方法を教えてもらえますか?

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

java - Webstart および JavaCompiler API の制限

私は、すべて同じ証明書によって署名された jar のみを持つアプリケーションを持っています。Webstart でアプリケーションを実行したくありません。アプリケーションはコンパイラを実行し、コンパイルされたコードは LWJGL を実行します。ただし、アプリケーションを実行すると、コンパイルされたコードによって、文字通り LWJGL(-library) パッケージが見つからないというエラーが返されます (元のアプリケーションでは問題なく表示されます)。アプリケーションを Trusted-Library としてコンパイルすると、同様にエラーが発生します。

http://download.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html 私はこのサイトを見つけましたが、特定の主題についてあまり賢くはありません。コンパイルされたコードは、他のコードとは異なる方法で処理されます。

誰でもこれで私を助けることができますか? それともクリア?

編集: コンパイルされたコードは署名なしとして扱われると結論付けました。ライブラリを認識させるには、それらをクラスパスに追加する必要があります。

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

java - 現在のクラスと同じ jar アーカイブにないクラスをロードするにはどうすればよいですか?

状況:

アルゴリズムの時間計算量をプロットするためのシミュレーターを作成しています。学生は、独自の .java ファイルを追加ロードして実行できます。私のプログラムは ('JavaCompiler' で) .java ファイルをコンパイルします。次に、.class ファイルをロードしようとします。

私のプログラムを Eclipse で実行すると、すべてが正常に動作し、学生はプログラムを問題なく使用できます。

問題:

しかし、その後、プロジェクトを実行可能な jar ファイルにエクスポートします。コンパイル部分は引き続き機能しますが、jar ファイルでクラスを検索するため、クラスのロードは失敗します。

なぜこれができないのだろうと思っていました: (変更 . with /)

どのようなオプションが可能ですか? ここで私が考えることができるもの:

  • コンパイルされた .class ファイルを現在実行中の .jar ファイルに追加します。これでも機能しますか?

    jar アーカイブを編集できることは知っています。しかし、これは実行中にプログラムを再起動せずに機能しますか?

  • 「loadClass()」を使用する他の方法はありますか? 私のjarファイルに含まれていないクラスファイルをロードできるように

他のアイデアはありますか?