JavaCompilerクラスを使用しようとしています:
ToolProvider.getSystemJavaCompiler()を呼び出すと、null が返されます。
これは、JDK の代わりに JRE を使用しているためだと思います。
問題は、ユーザーが JRE または JDK を使用している天候に関係なく、すべてのプラットフォームで実行することです。
誰かがこれを修正する方法、または使用する別の方法を知っている場合は、コメントしてください.
どんな助けでも大歓迎です。
JavaCompilerクラスを使用しようとしています:
ToolProvider.getSystemJavaCompiler()を呼び出すと、null が返されます。
これは、JDK の代わりに JRE を使用しているためだと思います。
問題は、ユーザーが JRE または JDK を使用している天候に関係なく、すべてのプラットフォームで実行することです。
誰かがこれを修正する方法、または使用する別の方法を知っている場合は、コメントしてください.
どんな助けでも大歓迎です。
ToolProvider.getSystemJavaCompiler() は使用できません。
tools.jar がクラスパスにありませんか?
Set class path to the tools.jar
jdk\jre ディレクトリにあるファイル。
System.setProperty("java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
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);
tools.jar ファイルを /lib からコピーするだけで動作します
System.out.println( System.getProperty( "java.home")) で取得できます
ほとんどの場合、C:\Program files\Java\jre(version) [Windows の場合] のようになります。