Java ClassNotFoundException为瘦战争

Java ClassNotFoundException为瘦战争,java,glassfish,ejb,war,ear,Java,Glassfish,Ejb,War,Ear,我在ear中打包的瘦war中面临类加载问题。 其中还打包了其他ejb模块。有些可以通过弹簧加载,有些则不能 设想以下场景: someApp.ear |- someEJBs1.jar |- someEJBs2.jar ... |- someEJBsX.jar |- someWar.war 如果我尝试从someWar.war通过spring访问以下中的一些类: someEJBs1.jar它可以工作 但是对于somejbs2.jar中的那些,我得到了java.lang.ClassNotFoundE

我在
ear
中打包的瘦
war
中面临类加载问题。 其中还打包了其他ejb模块。有些可以通过弹簧加载,有些则不能

设想以下场景:

someApp.ear
|- someEJBs1.jar
|- someEJBs2.jar
...
|- someEJBsX.jar
|- someWar.war
如果我尝试从someWar.war通过spring访问以下中的一些类:

  • someEJBs1.jar它可以工作
  • 但是对于somejbs2.jar中的那些,我得到了
    java.lang.ClassNotFoundException
不知道问题出在哪里。 我的
MANIFEST.MF
根本不包含任何类路径信息

我已经在想,是否有任何方法可以在运行时(可能在调试期间)查看加载的类,或者可能是为特定war文件提供的类路径


我正在运行glassfish 3.1.1(这是一项要求,不可能对此进行任何更改)。

在代码中尝试以下调试功能:

    //Prints the Root directory
    public static void printPWD() {
        File dir1 = new File(".");
        try {
            System.out.println("Current dir : " + dir1.getCanonicalPath());
            dir1 = null;
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }


     // Prints all files on the ClassPath to the system.out

    public static void printClasspathFiles() {
        ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();

        // Get the URLs
        URL[] urls = ((URLClassLoader) sysClassLoader).getURLs();

        for (int i = 0; i < urls.length; i++) {
            System.out.println(urls[i].getFile());
        }
    }

//prints the classpath to system.out
print printClasspath(){
       System.out.println(System.getProperty("java.class.path"));
}
//打印根目录
公共静态void printPWD(){
文件dir1=新文件(“.”);
试一试{
System.out.println(“当前目录:+dir1.getCanonicalPath());
dir1=null;
}捕获(异常e2){
e2.printStackTrace();
}
}
//将类路径上的所有文件打印到system.out
公共静态void printClasspathFiles(){
ClassLoader sysClassLoader=ClassLoader.getSystemClassLoader();
//获取URL
URL[]URL=((URLClassLoader)sysClassLoader.getURL();
for(int i=0;i

要获取所有加载的类,getAllLoadedClasses方法将非常有用

好的,终于找到了根本原因,我忽略了SpringXML配置中错误的包定义问题:

我想我应该正确地阅读错误消息。仔细检查我认为正确的地方。(对我来说,这并不是什么新鲜事)


现在它对我有效。

好的,测试过了,但老实说,它没有给我提供任何有用的信息。因为我无法看到所有可用于加载类的JAR。而是一些普通的玻璃鱼缸。无论如何,标记是正确的,因为这似乎是我能从类加载器得到的全部。此外,毫无疑问,你回答了我的问题:)