2012-09-13 18 views
5

Sé que podemos cargar clases dinámicamente mediante el uso de cargadores de clases personalizados. Pero aquí mi problema es mi clase en sí es depende de otras clasesCargando clases dinámicamente desde el jar

Mi tarea es conseguir objeto PigServer .Así que he utilizado siguiente código para cargar la clase PigServer

_pigServerClass = _classLoader.loadClass("org.apache.pig.PigServer"); 

Pero aquí la clase PigServer sí es depende en tantas otras clases.

Así que cuando estoy tratando de conseguir instancia de la clase PigServer entonces se está mostrando errores siguientes

java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 
java.lang.ClassNotFoundException:org.apache.log4j.AppenderSkeleton 
etc.. 

¿Alguien puede decirle cómo resolver esto?

Respuesta

0

¿Cómo creó su ClassLoader?

¿Ha especificado otro cargador de clases "principal", en el que se puede delegar la carga de clases?

+0

he creado ..its cargador de clases tomar la ruta de clase y vuelve ** _ customClassLoader = nuevo URLClassLoader (urls, PigClassLoader.class.getClassLoader()); ** –

+0

que para mi cargador de clases funciona bien. Eso es y no mostró una excepción de clase no encontrada para PigServer Class –

+0

¿Estás seguro de que el commons-logging y log4j están en el classpath? – Mirko

1

Parece haber un malentendido. Si usted tiene todos los frascos necesarios en una carpeta, por ejemplo "lib", puede por ejemplo configurar un cargador de clases como esto:

File libs = new File("lib"); 
    File[] jars = libs.listFiles(new FileFilter() { 
     public boolean accept(File pathname) { 
      return pathname.getName().toLowerCase().endsWith(".jar"); 
     } 
    }); 

    URL[] urls = new URL[jars.length]; 
    for (int i=0; i<jars.length; i++) { 
     urls[i] = jars[i].toURI().toURL(); 
    } 
    ClassLoader uc = new URLClassLoader(urls,this.getClass().getClassLoader()); 


    Class<?> pigServerClz = Class.forName("org.apache.pig.PigServer", false, uc); 
    Object pigServer = pigServerClz.newInstance(); 
    // etc... 
Cuestiones relacionadas