如何动态加载war包里的web-inf/classes目录里的class文件?

解决方案 »

  1.   

    ClassLoader classLoader = ClassLoader.getSystemClassLoader();
    //or get the you own classloader
    try{
    classLoader.loadClass("com.you.class.XXX");
    }catch(ClassNotFoundException e){
    e.printStackTrace() ;
    }
      

  2.   

    我测试了一下
    public static void main(String[] args) throws Exception {
    String classPath = null;
    File filePath = new File("C:/test/outweb.war/WEB-INF/classes");
    ClassLoader classLoader = new URLClassLoader(new URL[] { filePath.toURL() });
    Class beanClass = null;
    try {
     beanClass = classLoader.loadClass("cn.com.mycompany.project.bean.MyBean");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    System.out.println(beanClass.getName());报错:ClassNotFoundException;
    请问应该如何修改?
      

  3.   

    本来就是动态加载的,什么都不用做呀!
    Class.forName就可以
      

  4.   

    to treeroot(旗鲁特) :
    我测试了一下,但是出错了
    public static void main(String[] args) throws Exception {
    String classPath = null;
    File filePath = new File("C:/test/outweb.war/WEB-INF/classes");
    ClassLoader classLoader = new URLClassLoader(new URL[] { filePath.toURL() });
    Class beanClass = null;
    try {
     beanClass = classLoader.loadClass("cn.com.mycompany.project.bean.MyBean");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    System.out.println(beanClass.getName());报错:ClassNotFoundException;
    请问应该如何修改啊?
      

  5.   

    本来就是动态加载的,tomcat已经实现了类似你写的代码,你不用管它,连class.forname都不用!你那个classes下的目录结构可能有问题吧。。
      

  6.   

    我可能没有说清楚,我指的不是在服务器环境下;
    就是一个outweb.war包放在C:/test/目录下,没有任何服务器环境;
    如何用ClassLoader去获得outweb.war包里web-inf/classes目录里的的类?
      

  7.   

    to treeroot(旗鲁特):
    outweb.war是打包好的war文件,而且我确定我的文件存在;
    是不是ClassLoader只能加载jar文件里的class文件,而不能加载war文件里的web-inf/classes的class文件?
      

  8.   

    classpath只能是jar(zip)文件或者一个目录
    你这样当然不行,如果你解压war后就可以了
    File filePath = new File("C:/test/outweb.war/WEB-INF/classes");
    这个东西并不是一个不存在的呀!