javax.tools.JavaCompiler を使用してソースをコンパイルするときにクラスパスを設定するにはどうすればよいですか?
-
21-09-2019 - |
質問
クラスを利用します javax.tools.JavaCompiler
(jdk6) を使用してソース ファイルをコンパイルしますが、ソース ファイルは何らかの jar ファイルに依存します。のクラスパスを設定する方法 javax.tools.JavaCompiler
?
解決
の javax.tools.JavaCompiler#getTask() メソッドは options
コンパイラ オプションを設定できるパラメータ。次の メッセージ 呼び出し側プログラムのクラスパスにアクセスするためにそれらを設定する簡単な方法を説明します。
JARファイルについて知るために標準のJavaファイルマネージャーを構成する必要があります - コンパイラオプション引数を使用してそれを行う必要があります。
デフォルトでは、Javaコンパイラオブジェクトは、ClassPathの観点から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);
必要なのは、呼び出し側プログラムの実行時に適切なクラスパスを設定することだけです。
他のヒント
同じ問題は、最近私に起こった、最終的に私は2つの回避策を見つけました。あなたは、最初の答えはここに掲載同様のいずれかのの StandardJavaFileManager.setLocation(StandardLocation.CLASS_PATH、 "YOUR_CLASS_PATH")を呼び出すことにより、クラスパスを設定したり、Compiler.getTask(ARG_0、ARG_1、ARG_2、CLASS_PATH_OPTIONS、できると言います。