Avec Java 6, il est possible de compiler un source Java directement depuis vos programmes.
Voici la marche à suivre :
Créez des instances de JavaCompiler et StandardJavaFileManager.
JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager sjfm = jc.getStandardFileManager(null, null, null);
Ensuite, ajoutez une tâche de compilation au compilateur Java. La méthode getJavaFileObjects accepte plusieurs paramètres qui permettent de soumettre plusieurs compilations simultanément.
File javaCode = new File(« c:/java/fr/toto/CompilerTest.java »);
String[] opts = new String[]{« -d », « c:/classes »};
Iterable codeObject = sjfm.getJavaFileObjects(javaCode);
jc.getTask(null, sjfm, null, Arrays.asList(opts), null, codeObject).call();
sjfm.close();
S’il n’y a pas d’erreurs, la classe compilée est générée dans c:/classes.
Après cette compilation, cette classe est prête à être chargée dans le programme.
File classesMap = new File(« c:/classes »);
URL[] urls = new URL[]{classesMap.toURL()};
URLClassLoader ucl = new URLClassLoader(urls, cl);
Class clazz = ucl.loadClass(« fr.toto.CompilerTest »);
Et ça roule ! Magique !!