Eu gero essa classe “Alguem” no caminho especificado: “net/projeto/dominio” e bla bla bla…
O problema é que depois de executar esse código eu preciso “carregar” essa classe com um Class.forName()… porém ao referenciar a classe ocorre um erro dizendo que a mesma não foi encontrada…
Eu preciso compilar essa classe em runtime? O que mais eu preciso fazer para sincronizar o programa para que ele reconheça a existência dessa classe gerada em tempo de execução?
Bom, eu estou usando a classe “JavaCompiler”, porém ela gera o arquivo no mesmo diretório do arquivo fonte. O problema é que o projeto está configurado para armazenar os arquivos compilados na pasta bin. Portanto, ao dar um Class.forName(“pacote.pacote.Classe”) ocorre um erro de classe não encontrada…
Tem como eu direcionar a saída desse JavaCompiler para o diretório de output das classes compiladas?
ul1sses
Bom, consegui resolver meu problema.
Aqui o código de exemplo:
packagediversos;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Arrays;importjavax.tools.JavaCompiler;importjavax.tools.StandardJavaFileManager;importjavax.tools.StandardLocation;importjavax.tools.ToolProvider;importjavax.tools.JavaCompiler.CompilationTask;publicclassTesteClassLoadewr{publicstaticvoidmain(Stringargs[])throwsIOException,ClassNotFoundException{StringbinPath="bin";StringclasseJava="package dominio.entidades;\n\n"+"public class Usuario {\n\n"+"\tpublic String email;\n"+"\tpublic String senha;\n\n"+"}";Filearquivo=newFile("src/dominio/entidades/Usuario.java");if(!arquivo.exists()){arquivo.createNewFile();}FileOutputStreamfos=newFileOutputStream(arquivo);fos.write(classeJava.getBytes());fos.flush();fos.close();JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();StandardJavaFileManagerstandardJavaFileManager=compiler.getStandardFileManager(null,null,null);standardJavaFileManager.setLocation(StandardLocation.CLASS_OUTPUT,Arrays.asList(newFile(binPath)));CompilationTaskcompilationTask=compiler.getTask(null,standardJavaFileManager,null,null,null,standardJavaFileManager.getJavaFileObjectsFromFiles(Arrays.asList(arquivo)));compilationTask.call();Classclazz=Class.forName("dominio.entidades.Usuario");System.out.println(clazz);}}