Comment mettre classpath lorsque j'utilise javax.tools.JavaCompiler compiler les sources?
-
21-09-2019 - |
Question
J'utilise la javax.tools.JavaCompiler
de classe (JDK6) pour compiler un fichier source, mais le fichier source dépend d'un fichier jar. Comment définir le chemin du javax.tools.JavaCompiler
?
La solution
javax.tools.JavaCompiler # getTask () méthode prend un paramètre options
qui permet de définir les options du compilateur. Le décrit un moyen facile de les mettre pour accéder à la classpath programme appelant:
Vous devez configurer la norme gestionnaire de fichiers java pour connaître la fichiers jar (s) - vous utilisez le compilateur arguments des options pour le faire.
Par défaut l'objet compilateur java ne semble savoir sur la valeur par défaut emplacements pour BOOTCLASSPATH, extdirs et répertoires endorseddirs en termes de son classpath.
Vous devez ajouter ce programme d'appel classpath courant au compilateur java par exemple sur les années qui se transmet le gestionnaire de fichiers standard, qui sera puis trouver des cours dans les fichiers jar.
Voici comment je le fais dans le compilateur Wrapper je l'ai écrit
List<String> optionList = new ArrayList<String>(); // set compiler's classpath to be same as the runtime's optionList.addAll(Arrays.asList("-classpath",System.getProperty("java.class.path"))); // any other options you want optionList.addAll(Arrays.asList(options)); JavaCompiler.CompilationTask task = compiler.getTask(out,jfm,diagnostics,optionList,null,jfos);
Tout ce que vous aurez besoin est d'obtenir ensuite l'ensemble approprié classpath lors de l'exécution du programme appelant.
Autres conseils
Le même problème me est apparu récemment, enfin j'ai trouvé deux solutions de contournement. Vous pouvez définir le chemin de classe soit par Invoke StandardJavaFileManager.setLocation (StandardLocation.CLASS_PATH, "YOUR_CLASS_PATH") ou Compiler.getTask (ARG_0, Arg_1, ARG_2, CLASS_PATH_OPTIONS, tout comme la première réponse affichée dit ici.