Chargement du code source externe et de les utiliser en interne (par recompiler ou quelque chose)

StackOverflow https://stackoverflow.com/questions/1981750

Question

Est-il possible à utiliser sourcecode stocké en externe et de le charger dans un programm Java, de sorte qu'il peut être utilisé par elle?

Je voudrais avoir un programme qui peut être modifié sans modifier le code source complet et que cela est encore possible sans compilation cela à chaque fois. Un autre avantage est que je peux changer les parties du code comme je veux.

Bien sûr, je dois avoir des interfaces de sorte qu'il est possible d'envoyer des données sur cette question et le récupérer dans le programme source fixe à nouveau.

Et bien sûr, il devrait être plus rapide qu'un système d'interprétariat pur.

est-il un moyen donc à faire cela comme une compilation supplémentaire de ces parties de code source externe et un début du programm après cela est fait?

Merci à l'avance, Andreas:)

Était-ce utile?

La solution

Vous avez besoin javax.tools API pour cela. Ainsi, vous devez avoir au moins le JDK installé pour faire fonctionner (et laissez votre point IDE au lieu du JRE). Voici un exemple de coup d'envoi de base (sans exception appropriée et le codage manipulation juste pour l'exemple de base moins opaque, toux ):

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);
}

Cela devrait imprimer test dans stdout, comme cela se fait par l'initialiseur statique dans le code source de test. Toute autre utilisation serait plus facile si ces classes met en œuvre une certaine interface qui est déjà dans le classpath. Sinon, vous devez impliquer API de réflexion pour accéder et appeler les méthodes / champs.

Autres conseils

En Java 6 ou version ultérieure, vous pouvez obtenir un accès au compilateur par le package javax.tools. ToolProvider.getSystemJavaCompiler () vous obtiendrez un javax.tools .JavaCompiler , que vous pouvez configurer pour compiler votre source. Si vous utilisez des versions antérieures de Java, vous pouvez toujours obtenir à travers l'interface com.sun.tools.javac.Main interne, mais il est beaucoup moins souple.

java6 a une API de script. Je l'ai utilisé avec Javascript, mais je crois que vous pouvez avoir compiler le code Java externes.

http://java.sun.com/developer/technicalArticles/ J2SE / Desktop / script /

Edit: Voici un lien plus pertinent: code "source dynamique" dans les applications Java

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top