2009-10-14 11 views

答えて

36

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

あなたは jarファイル(複数可)について知っておく標準 javaファイルマネージャを設定する必要があります - あなたがコンパイラを使用これを行うには オプションの引数が必要です。

デフォルトでJavaコンパイラのオブジェクト は、デフォルトに関する用語のクラスパスの でブートクラスパス、extdirs とendorseddirsディレクトリの 場所を知っているようです。

あなたはjarファイル内のクラスを見つけ、その後 ます 標準のファイルマネージャ、上で渡されるJavaコンパイラ インスタンスのに呼び出しプログラムの 現在のクラスパスを追加する必要があります。

は、ここであなたが必要なすべての呼び出し元のプログラムを実行するときに、適切なクラスパスのセットを取得することです、私はthe compiler wrapper I wrote

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); 

でそれを行う方法です。

+0

Satheeshを投稿することができますこれは答えとして、 "コンパイララッパー(リンクは機能しません)を事前に感謝してもらえますか?" –

+0

この記事のための製粉機に感謝しています。これは何年もの間苦労していました。 :) – flexinIT

+2

ところで、 'JavaCompiler'の' classpath'オプションはワイルドカードを「理解」しません。したがって、それぞれの 'jar'をこの文字列に直接追加する必要があります。 – Andremoniy

2

最近同じ問題が発生しましたが、最後に2つの回避策が見つかりました。あなたは、どちらかのクラスパスを設定することにより、ここに掲載最初の答えが言う同じようにStandardJavaFileManager.setLocation(StandardLocation.CLASS_PATH、 "YOUR_CLASS_PATH")またはCompiler.getTask(ARG_0、ARG_1、ARG_2、CLASS_PATH_OPTIONSを呼び出す。

+0

これを動作させるために、私は 'StandardJavaFileManager.setLocation(StandardLocation.CLASS_PATH、Arrays.asList(new File(classpath))));' –

関連する問題