首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassNotFoundException用于瘦身战争

ClassNotFoundException用于瘦身战争
EN

Stack Overflow用户
提问于 2013-01-15 16:22:13
回答 2查看 420关注 0票数 1

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

想象一下以下场景:

代码语言:javascript
复制
someApp.ear
|- someEJBs1.jar
|- someEJBs2.jar
...
|- someEJBsX.jar
|- someWar.war

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

  • 它起作用了
  • 但是对于EJB2.jar中的那些,我得到了java.lang.ClassNotFoundException

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

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

我在glassfish 3.1.1中运行(这是必需的,不可能对此做任何更改)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-15 16:30:10

在代码中尝试以下调试函数:

代码语言:javascript
复制
    //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方法将非常有用。看这里

票数 2
EN

Stack Overflow用户

发布于 2013-01-16 08:17:55

好了,终于找到了根本原因,我忽略了春季xml吐露中错误的包定义问题。:)

我想我应该正确地阅读错误信息。再检查一遍我认为是正确的。(对我来说,这不是什么新鲜事)

现在它对我有用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14342107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档