0

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

想象以下场景:

someApp.ear
|- someEJBs1.jar
|- someEJBs2.jar
...
|- someEJBsX.jar
|- someWar.war

如果我尝试从 someWar.war 通过 spring 访问一些类:

  • someEJBs1.jar 它工作
  • 但对于 someEJBs2.jar 中的那些我得到java.lang.ClassNotFoundException.

不知道问题出在哪里。我的MANIFEST.MF根本不包含任何类路径信息。

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

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

4

2 回答 2

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"));
}

要获取所有加载的类,getAllLoadedClasses 方法会很有用。看这里

于 2013-01-15T16:30:10.147 回答
0

OK,终于找到了根本原因,我忽略了spring xml configs中包定义错误的问题。:)

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

现在它对我有用。

于 2013-01-16T08:17:55.883 回答