25

JavaCompilerクラスを使用しようとしています:

ToolProvider.getSystemJavaCompiler()を呼び出すと、null が返されます。

これは、JDK の代わりに JRE を使用しているためだと思います。

問題は、ユーザーが JRE または JDK を使用している天候に関係なく、すべてのプラットフォームで実行することです。

誰かがこれを修正する方法、または使用する別の方法を知っている場合は、コメントしてください.

どんな助けでも大歓迎です。

4

8 に答える 8

11

ToolProvider.getSystemJavaCompiler() は使用できません。

tools.jar がクラスパスにありませんか?

Set class path to the tools.jarjdk\jre ディレクトリにあるファイル。

System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");

于 2013-10-07T20:17:46.270 に答える
5

JDK がインストールされていない場合にアプリケーションから Java コンパイラを実行する方法を次に示します。

まず、JDK の tools.jar ファイルを Java アプリに含め、tools.jar をクラスパスに配置します。オラクルはおそらくあなたがそうするのを好まないでしょう。ただし、法的な回避策があります。tools.jar ファイルは、openjdk.org (openjdk)、RedHat (IcedTea)、または Azul Systems (Zulu) が提供する無料の JDK から取得します。

次に、ToolProvider.getSystemJavaCompiler() と JavaCompiler クラスを使用する代わりに、tools.jar にあるコンパイラを直接呼び出します。以下はコードのスニペットです。

String classpath = ...; // make sure tools.jar is in this path 
String sourcepath = ...; // path to your sources
String putputpath = ...; // directory for generated class files
String filepath = ...; // file path the file you want to compile

String[] args = new String[] {
"-classpath", classpath,
"-sourcepath", sourcepath,
"-d", putputpath,
filePath
};
com.sun.tools.javac.Main javac = new com.sun.tools.javac.Main();
int compileStatus = javac.compile(args);
于 2014-06-05T06:10:13.827 に答える
4

これが問題だと思います.JDKディレクトリで使用しているjava.exeのバージョンを明示的に指定しています。

詳細はこちら

于 2013-03-20T00:56:07.897 に答える
3

tools.jar ファイルを /lib からコピーするだけで動作します

System.out.println( System.getProperty( "java.home")) で取得できます

ほとんどの場合、C:\Program files\Java\jre(version) [Windows の場合] のようになります。

于 2016-12-04T04:46:25.397 に答える