web-dev-qa-db-fra.com

ToolProvider.getSystemJavaCompiler () renvoie null - utilisable uniquement avec JRE installé?

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.

22
Josh Sobel

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

9

Je pense que c’est le problème . Spécifiant explicitement la version de Java.exe que vous utilisez en tant que celle de votre répertoire JDK.

voir ici pour plus de détails

4
PSR

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

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]

2
Mr. Suryaa Jha

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

1
user3509406

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

0
clankill3r

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.

0
Arshad Ali

J'avais à la fois JRE et JDK dans mon buildPath ... Je viens de retirer le JRE et tout a été corrigé.

0
Manuel Musetti