java - solucion - Cargando clases no presentes en el classpath
java.lang.noclassdeffounderror: could not initialize class (2)
Necesita escribir su propio cargador de clases.
Este enlace javadoc tiene un ejemplo de cómo puedes definir uno personalizado.
Digamos que he compilado un script de Groovy usando Groovyc, que ha generado uno o más archivos .class en el sistema de archivos. Desde una aplicación Java, ¿cómo agrego esas clases dinámicamente a la ruta de clase para cargarlas y llamar a sus métodos? El objetivo es precompilar los scripts de Groovy y almacenarlos en la base de datos, por lo que la evaluación se puede realizar desde versiones compiladas de los scripts.
Puede crear una instancia de URLClassLoader para cargar nuevas clases desde un directorio:
URL dirUrl = new URL("file:/" + "path_to_dir" + "/"); // 1
URLClassLoader cl = new URLClassLoader(new URL[] {dirUrl},
getClass().class.getClassLoader()); // 2
Class loadedClass = cl.loadClass("com.xyz.MyClass");
MyClass obj = (MyClass) loadedClass.newInstance();
obj.doSomething();
La línea 1 crea el URL
al directorio donde residen los archivos .class.
La línea 2 crea una nueva instancia de URLClassLoader
. El primer argumento es una matriz de URL que se utilizará como fuente. Puede especificar múltiples URL de directorio dentro de la matriz. El segundo argumento es el cargador de clases que se convertirá en el padre de este nuevo cargador de clases. Pasamos el cargador de clases de la clase que ejecuta el código anterior como este argumento.
Las clases cargadas por un cargador de clases hijo pueden acceder a las clases cargadas por el cargador de clases padre.