問題タブ [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 に答える
6609 参照

java - コンテキスト クラスローダーで JDK6 ToolProvider と JavaCompiler を使用するにはどうすればよいですか?

私の使用例は、JDK 6 で提供される ToolProvider および JavaCompiler クラスを使用して、Java プログラムから生成されたソース ファイルをコンパイルすることです。ソース ファイルには、コンテキスト クラスローダー (J2EE コンテナーで実行される) 内のクラスへの参照が含まれていますが、システム クラスローダー内には含まれていません。私の理解では、デフォルトでは、ToolProvider はシステム クラスローダーを使用して JavaCompiler インスタンスを作成します。

JavaCompiler が使用するクラスローダーを指定する方法はありますか?

IBM DeveloperWorks の何かを変更して、このアプローチを試しました。

FileManagerImpl は次のように定義されています。

スタックトレースは、アノテーション処理中に一度だけ呼び出されたことを示しています。コンパイルするソース ファイルで参照されているクラスがシステム クラスパス上になく、コンテキスト クラスローダーから使用できることを確認しました。

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

java - javax.tools.JavaCompiler を使用してソースをコンパイルするときにクラスパスを設定するにはどうすればよいですか?

クラスjavax.tools.JavaCompiler(jdk6) を使用してソース ファイルをコンパイルしますが、ソース ファイルは一部の jar ファイルに依存しています。のクラスパスを設定する方法はjavax.tools.JavaCompiler?

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

java - JSR 199 Compiler API を使用してディレクトリ ツリー内の一連の Java ファイルをコンパイルする

Compiler API を使用して多くのファイルをコンパイルしようとしています。

ディレクトリ構造があるとします

すべての Java ファイルを検出し、すべてのディレクトリに再帰してすべての *.java ファイルを見つけることなく、すべてをコンパイルする方法はありますか?

編集:私がやろうとしているのは、ディレクトリツリーで取得したすべてのクラスをコンパイルすることです。これらのクラスは互いに独立しています。次に、クラスをロードし、これらのクラスのいくつかのオブジェクトをインスタンス化し、メソッドを呼び出します。どのクラスもメインを持つ必要はありません。

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

java - javax.tools は JDK に依存していますか?

JavaCompilerいくつかのクラスを動的に作成するために使用したい。

パッケージのソース コードを見つけましたjavax.toolsが、実装がありません。インターネット上のいくつかの投稿では、に依存していると言われていますが、 JRE と関連がtools.jarあるかどうかはわかりません。tools.jar

では、JDK がインストールされていない JRE 環境でプログラムを実行できますか?

別の質問です。 の実装の詳細は何ですか。コマンドJavaCompilerを呼び出すための新しいプロセスを作成していますか?javac

ありがとう

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

java - JavaCompilerによってコンパイルされたコードを実行する方法は?

JavaCompilerでコンパイルされたプログラムを実行する方法はありますか?[javax.tools.JavaCompiler]

私のコード:

今、私はそのプログラムを寿命1秒で実行し、文字列変数に出力を取得したいと思います。私がそれをすることができる方法はありますか?

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

java - JavaCompiler と ClassLoader を使用したユーザー コードのコンパイルと実行

Java学習用のWebアプリを書いています。どのユーザーが自分のサーバーでコードをコンパイルし、そのコードを実行できるかを使用します。JavaCompiler を使用すると、コンパイルは簡単です。

私はコードでクラスをロードすることに成功しました:

無限ループや邪悪な学生からアプリを保護するにはどうすればよいですか ;)

  1. そのコードを生涯にわたって実行する方法はありますか?
  2. メモリリークのリスクはありますか?これを修正するにはどうすればよいですか?
  3. これは良い解決策ですか、それとももっと良いものを提案できますか?

どうも。ツィム

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

java - 任意のサブフォルダーに格納されたパッケージ内の Java クラスをプログラムでコンパイルする

特定の数のパッケージに含まれるさまざまな数の Java クラスで構成されるアプリケーションを Java でコンパイルしようとしています。コマンド ラインで、ルート パッケージを含むフォルダーに移動し、次のように入力します。

また

私のルートパッケージのすべてのプライマリサブパッケージですべてのJavaクラスをコンパイルします。

ただし、Java アプリケーション内でこれを実行できるようにしたいと考えています。(アイデアは、ユニット テストを含むアプリケーションを学生に提供することです。ユニット テストは学生のコードに対して実行する必要があり、アプリケーションは、テスト結果が「透かし」されたソース ファイルを含む JAR ファイルを作成します。すべてこれは問題なく動作しますが、テストしたクラス ファイルが提出されたソース ファイルから作成されていることを確認したいので、Java ソースをプログラムでコンパイルするという考えです)。

問題は、各学生が自分のルート パッケージを任意の場所に保存し、ファイルの場所を JavaCompiler (javax.tools) に渡すことができないことです。

可能であれば、任意に配置されたルートパッケージを適切にコンパイルする方法についてヒントを与えることができますか?

乾杯

リチャード

より詳しい情報:

学生のフォルダ構造は次のとおりです。

ルートパッケージが含まれています。彼らはアプリケーション (このフォルダーに保存されている可能性があり、したがって問題はありませんが、他の場所に保存されている可能性が高い) を起動し、ルート パッケージを含むフォルダーを要求します。入力後、学生は [JAR の作成] ボタンをクリックします。これにより、パッケージ内のファイルがコンパイルされ、新しくコンパイルされたファイルに対してテストが実行され、JAR が作成されます。

この問題について考えながら、ルート パッケージを含むフォルダに「JAR の作成」アプリケーションをインストールするよう学生に指示することで解決できる可能性があります。

0 投票する
6 に答える
14112 参照

java - Java コンパイラ API の使用中に Null ポインタ例外が発生する

MyClass.java:

MyClass.java ファイルをコンパイルする SimpleCompileTest.java のリスト。

SimpleCompileTest.java:

SimpleCompileTest クラスを実行して NullPointerException を取得しています。ToolProvider.getSystemJavaCompiler() が null を返しています。誰かがコードの何が問題なのか教えてもらえますか

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

java - Javassist でコンパイルされたクラスのクラスパス

タイトルの通り、Javassistでコンパイルされたクラスのクラスパスは?

私のシナリオは次のとおりです。クラス A は Javassist でコンパイルされています。クラス B は Java Compiler API でコンパイルされ、クラス A を参照します。問題は、クラス A がクラス B から見えないことです...

何か案は?

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

java - Java のデフォルトのコンパイル ディレクトリ

Java Compiler API を使用して、実行時にいくつかのクラスを作成しています。ただし、これらのクラスを、他のクラス ファイルが生成されるデフォルトのコンパイル ディレクトリにコンパイルしたいと考えています。

これに簡単な方法はありますか?クラスパスを確認すると、実際には最初の URI が必要なディレクトリであることがわかりますが、それは常に最初ですか?