Como definir o ClassPath quando eu uso javax.tools.javacompiler compilar a fonte?
-
21-09-2019 - |
Pergunta
Eu uso a classe javax.tools.JavaCompiler
(JDK6) para compilar um arquivo de origem, mas o arquivo de origem depende de algum arquivo JAR. Como definir o caminho de classe do javax.tools.JavaCompiler
?
Solução
o javax.tools.javacompiler#gettask () O método leva um options
parâmetro que permite definir opções de compilador. A seguir mensagem Descreve uma maneira fácil de configurá -los para acessar o caminho de classe de chamada:
Você precisa configurar o gerenciador de arquivos Java padrão para saber sobre os arquivos JAR - você usa o argumento das opções do compilador para fazer isso.
Por padrão, o objeto Java Compiler parece apenas saber sobre os locais padrão dos diretórios BootClassPath, Extdirs e EndossedDirs em termos de sua classe.
Você precisa adicionar o caminho de classe atual do programa de chamada às instância do compilador Java, que é transmitido no gerenciador de arquivos padrão, que encontrará classes nos arquivos JAR.
Aqui está como eu faço isso em o invólucro do compilador que escrevi
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);
Tudo o que você precisará é definir o caminho de classe adequado ao executar o programa de chamada.
Outras dicas
O mesmo problema me ocorreu recentemente, finalmente encontrei duas soluções alternativas. Você pode definir o caminho da classe, também invocando StandardJavafilemanager.SetLocation (StandardLocation.class_path, "your_class_path") ou compiler.gettask (arg_0, arg_1, arg_2, class_path_options, exatamente como diz a primeira resposta postada aqui.