Breve descrição
Esta classe usa o javacompiler incluído no javax.tools.toolprovider para compilação, usa arquivos de IO e nio para criação, leitura e cópia correspondentes e usa expressões regulares para converter nomes e diretórios de pacotes. Acabei de fazer uma integração tolerante a falhas dessas coisas e ela não tem conteúdo técnico, por isso é por conveniência.
API do módulo
Classe DynamicReactor: // Parâmetro vazio Construa a classe pública <?> DynamicCompile (String srcPath); // Insira um caminho de arquivo de origem especificado, se a compilação e a cópia forem bem -sucedidas, retorne a classe de classe correspondente da classe de classificação de string privada na stringspackettodic (string packAgename); // convert um nome de pacote legal para o caminho do caminho no caminho do caminho no caminho do caminho do caminho do caminho do caminho do caminho do caminho do caminho do caminho do caminho do caminho do pacote iMaC, o pacote iC); diretório correspondentemente.
código -fonte
importar java.io.bufferedReader; importar java.io.file; importar java.io.fileReader; importar java.io.ioException; importar java.nio.file.files; importação java.nio.file.path; import java.nio.file.CPATHS; java.util.regex.matcher; importar java.util.regex.pattern; importar javax.tools.javacompiler; importar javax.tools.toolprovider;/*** DynamicreActor A Compilation módulo é responsável por arquivos de compilação, copiá-los para os pacotes de correspondência e o ladrão de compilação, copiá-los para os pacotes correspondentes e os pacotes de combate a os pacote de fôlego. */public class DynamicReActor {Javacompiler Compiler; Pattern PackagePattern; Static final String regex = "(? <= package // s). @Param SRCPath File Path * @return Class * <br> Se o sucesso retornará a instância da classe da classe correspondente * <br> Se a falha retornará nulo * */public class <? {System.out.println ("Dynamicrector: Carregar Erro de nome do pacote!"); Retorna null;} // Call Compiler para compilar o arquivo de origem especificado int res = compiler.run (null, null, null, srcpath); if (res! correspondente ao nome do pacote, crie -o se o caminho não existir e substituir se o arquivo de classe especificado existir String packagedSt = changepackettodic (packName); arquivo dstdir = new File (packagedSt); if (! dstdir.exists ()) {dstdir.mkdir ();} pathfrom = paths. + ".class"); caminho do caminho = paths.get (packagedSt, pathfrom.getFilename (). tostring ()); tente {files.move (pathfrom, pathto, standardOpyOption.replace_existing);} catch (ioxception e) {system.out.Println ("DynamicRepting); {resultado = class.ForName (packName+"."+pathfrom.getFilename (). tostring (). split ("// class") [0]);} catch (classNotFoundException e) {System.out.println "DynamicRector: Class não encontrado em final!")}; Changepackettodic (String PackAgename) {String [] dirs = packAgename.split ("//."); String res = ".//bin"; para (int i = 0; i <dir.length; i ++) {res+=" // "+dirs [i];} Return;} // Método este método este this {res+=" // "+dirs [i];} resgin; {String result = null; BufferEredReader Br; try {Br = new BufferredReader (novo FileReader (srcPath)); String data = Br.readline (); while (data! = Null) {if (data.indexof ("Package")! = -1) {Matchaer M = packagePattern.Matcher (Data); = Br.readLine ();} Br.Close ();} Catch (IoException e) {System.out.println ("Dynamicrector: Erro no arquivo aberto"+srcpath);} resultado;}}}Resumir
O exposto acima é todo o conteúdo deste artigo sobre compilação dinâmica e carregamento da programação Java. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!