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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top