Pergunta

Existe uma maneira de usar o SourceCode armazenado externamente e carregá -lo em uma programação Java, para que ele possa ser usado por ele?

Gostaria de ter um programa que possa ser alterado sem editar o código -fonte completo e que isso é possível sem compilar isso sempre. Outra vantagem é que eu posso alterar partes do código como eu quero.

É claro que tenho que ter interfaces para que seja possível enviar dados para isso e colocá -los de volta ao programa de fonte fixa novamente.

E é claro que deve ser mais rápido que um sistema de interpretação puro.

Então, existe uma maneira de fazer isso como uma compilação adicional dessas peças externas do código -fonte e um início da programação depois que isso for feito?

Agradeço antecipadamente, Andreas :)

Foi útil?

Solução

Você precisa do Javax.Tools API por esta. Assim, você precisa ter pelo menos o JDK instalado para fazê -lo funcionar (e deixe seu IDE apontar para isso em vez do JRE). Aqui está um exemplo básico de pontapé inicial (sem exceção adequada e codificação de manuseio apenas para tornar o exemplo básico menos opaco, tosse):

public static void main(String... args) throws Exception {
    String source = "public class Test { static { System.out.println(\"test\"); } }";

    File root = new File("/test");
    File sourceFile = new File(root, "Test.java");
    Writer writer = new FileWriter(sourceFile);
    writer.write(source);
    writer.close();

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    compiler.run(null, null, null, sourceFile.getPath());

    URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
    Class<?> cls = Class.forName("Test", true, classLoader);
}

Isso deve imprimir test no stdout, como feito pelo inicializador estático no código -fonte do teste. Outros usos seriam mais fáceis se essas classes implementarem uma determinada interface que já está no caminho de classe. Caso contrário, você precisa envolver o API de reflexão Para acessar e chamar os métodos/campos.

Outras dicas

No Java 6 ou posterior, você pode ter acesso ao compilador através do pacote javax.tools. ToolProvider.getsystemjavacompiler () fará com que você javax.tools.javacompiler, que você pode configurar para compilar sua fonte. Se você estiver usando versões anteriores do Java, ainda poderá fazer isso através da interface com.sun.tools.javac.main interface, embora seja muito menos flexível.

O Java6 tem uma API de script. Eu o usei com JavaScript, mas acredito que você também pode compilar código Java externo.

http://java.sun.com/developer/technicalarticles/j2se/desktop/scripting/

EDIT: Aqui está um link mais relevante:Código "Dynamic Source" em aplicativos Java

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