J'essaie d'utiliser le JavaCompiler class:
Lorsque j'appelle ToolProvider.getSystemJavaCompiler () it renvoie null.
Je pense que c'est parce que j'utilise un JRE au lieu d'un JDK.
Le problème est que je veux qu'il fonctionne sur toutes les plateformes, quelle que soit la météo, l'utilisateur utilise un JRE ou un JDK.
Si quelqu'un sait comment résoudre ce problème, ou une méthode alternative, merci de le commenter.
Toute aide serait appréciée.
ToolProvider.getSystemJavaCompiler () n'est pas disponible.
Tools.jar manque-t-il dans le classpath?
Set class path to the tools.jar
fichier pouvant se trouver dans le répertoire jdk\jre.
System.setProperty("Java.home", "C:\\Program Files\\Java\\jdk1.7.0_02");
Voici comment exécuter le compilateur Java à partir de votre application lorsqu'aucun JDK n'est installé.
Commencez par inclure le fichier tools.jar à partir d’un JDK avec votre application Java et placez tools.jar dans votre chemin de classe. Oracle ne vous plaira probablement pas. Mais, il existe des solutions légales. Vous obtenez le fichier tools.jar à partir des JDK gratuits proposés par openjdk.org (openjdk), RedHat (IcedTea) ou Azul Systems (Zulu).
Ensuite, au lieu d'utiliser ToolProvider.getSystemJavaCompiler () et la classe JavaCompiler, appelez directement le compilateur situé dans tools.jar. Voici un extrait de code:
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);
Il suffit de copier le fichier tools.jar de/lib vers . Cela fonctionne
Vous pouvez obtenir par System.out.println (System.getProperty ("Java.home"))
La plupart du temps, cela ressemble à C:\Program files\Java\jre (version) [pour Windows]
Une autre solution consiste à: - http://bugs.Java.com/bugdatabase/view_bug.do?bug_id=7181951
Copiez tools.jar dans JDK_HOME/lib/dans JRE_HOME/lib /. Au moins pour moi, cela a résolu mon problème de façon magique!
(Je n'ai rien recommandé comme ci-dessus. Je l'ai simplement copié ici.)
Sur un Mac, cela a fonctionné pour moi:
System.setProperty("Java.home", "/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home");
javax.tools.JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
(Cela ne fonctionne pas pour idk 10 pour une raison quelconque).
voici une solution simple qui a fonctionné pour moi
Je viens de changer la bibliothèque système de jre en ... Program Files\Java\jdk1.7.0_55\jre au lieu de .... Program Files\Java\jdk1.7.0_55\bin et cela a fonctionné pour moi.
J'avais à la fois JRE et JDK dans mon buildPath ... Je viens de retirer le JRE et tout a été corrigé.