java - servidor - Implementación de complementos JAR
http 500 no se puede compilar la clase para jsp (2)
Tengamos una aplicación de Groovy / Java que debe usar un conjunto de clases, definidas en archivos *.jar
externos (supongamos que se encuentran cerca del archivo ejecutable principal).
Entonces, la clase principal (llamémosla Main
) debería cargar el archivo plugin.jar
en el tiempo de ejecución y llamar a algún método de instancia en la clase, definida en ese jar (supongamos que la clase tiene el nombre como jar - Plugin
in nuestro caso).
La clase Main
no pudo saber qué complementos tiene hasta que se ejecuta. java -jar
argumentos CLASSPATH
y java -jar
run y simplemente hagamos la magia solo con código.
Entonces, ¿cómo se podría hacer esto y cómo debería plugin.jar
el plugin.jar
(usando Eclipse en mi caso) para cargarlo correctamente?
PD: sí, compilo mis fuentes geniales en el archivo jar. Pero necesito realizar una carga de clase e invocar exactamente sobre la marcha.
¡El secreto fue realmente simple!
Usar URLClassLoader
hace el truco.
Entonces, el código de Groovy :
ClassLoader loader = new URLClassLoader((URL[]) [
new File("C://Users//errorist//workspace//javatest1//bin//").toURI().toURL()
])
Class c = loader.loadClass("src.SomeClass1")
c.invokeMethod("main", (String[]) ["Hello", "World"])
Y el de Java :
File file = new File("C://Users//errorist//workspace//javatest1//bin//");
URL[] urls = new URL[] { file.toURI().toURL() };
ClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("src.SomeClass1");
c.invokeMethod("main", new String[] { "Hello", "World!" });