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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top