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をクラスパスに配置します。Oracleはおそらくそれを好まないでしょう。しかし、法的な作業があります- 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);
これは 問題 だと思います。使用しているJava.exeのバージョンをJDKディレクトリのバージョンとして明示的に指定します。
こちらをご覧ください 詳細はこちら
Tools.jarファイルを/ libからItにコピーするだけです。
System.out.println(System.getProperty( "Java.home"))で取得できます。
ほとんどの場合、C:\ Program files\Java\jre(version)[forwindows]のようなものです。
別の解決策は次のとおりです。- http://bugs.Java.com/bugdatabase/view_bug.do?bug_id=7181951
JDK_HOME/lib /のtools.jarをJRE_HOME/lib /にコピーします。少なくとも私にとっては、それは私の問題を魔法のように解決しました!
(上記のように推奨されることは何もしませんでした。そこにコピーしただけです。)
Macではこれは私のために働いた:
System.setProperty("Java.home", "/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home");
javax.tools.JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
(何らかの理由でidk 10では機能しません)。
これが私のために働いた簡単な解決策です
Jreシステムライブラリを.... Program Files\Java\jdk1.7.0_55\binではなく..... Program Files\Java\jdk1.7.0_55\jreに変更したところ、機能しました。
BuildPathにJREとJDKの両方がありました... JREを削除したところ、修正されました。