41

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

4

2 に答える 2

40

javax.tools.JavaCompiler #getTask()メソッドは、optionsコンパイラ オプションを設定できるパラメータを受け取ります。次のメッセージは、呼び出しプログラムのクラスパスにアクセスするためにそれらを設定する簡単な方法を説明しています:

jar ファイルについて知るには、標準の Java ファイル マネージャーを構成する必要があります。これを行うには、コンパイラ オプション引数を使用します。

デフォルトでは、Java コンパイラ オブジェクトは、そのクラスパスに関して、bootclasspath、extdirs、および endorseddirs ディレクトリのデフォルトの場所についてのみ認識しているようです。

呼び出しプログラムの現在のクラスパスを、標準のファイル マネージャーに渡される Java コンパイラ インスタンスに追加する必要があります。これにより、jar ファイル内のクラスが検索されます。

私が書いたコンパイララッパーでそれを行う方法は次のとおりです

List<String> optionList = new ArrayList<String>();
// set compiler's classpath to be same as the runtime's
optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path")));

// any other options you want
optionList.addAll(Arrays.asList(options));

JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos);

必要なのは、呼び出しプログラムを実行するときに適切なクラスパス セットを取得することだけです。

于 2009-10-14T02:57:09.250 に答える