【发布时间】:2014-06-04 09:08:42
【问题描述】:
我有这种情况:
- //Tomcat7/webapps/app1/WEB-INF/classes/a/b/c/A.class
- //Tomcat7/webapps/app1/WEB-INF/classes/a/b/c/B.class
- //Tomcat7/webapps/app2/WEB-INF/classes/a/b/c/B.class(与类不同但同名)
- //Tomcat7/webapps/app2/WEB-INF/classes/a/b/c/C.class
注意:类目录层次相同,只是类文件不同。
app1 的日志文件包含 NoClassDefFoundError for A.class。检查目录,类文件肯定在那里。现在我想弄清楚 ClassLoader 是否有可能只加载 B.class 而不是 A.class,尽管每个 webapps 应该有一个 ClassLoader - 意味着两个 ClassLoader?
有什么想法吗?
编辑:Tomcat7 是通过 Tanuki JWS 启动的。从wrapper.log可以看到先初始化app2,然后才初始化app1。
问候, 艾伦
【问题讨论】:
-
如果我没记错的话,Tomcat 会分别管理每个应用程序的类路径,因此来自 app1 的类不能被来自 app2 的同名类隐藏。
-
如果使用 Tanuki JSW 启动容器,这个也会一样吗?
-
你似乎真的一心要责备你正在使用的工具。我会停止这种做法,除非你至少有一些证据证明它可能是真的,希望它成为你个人做错的事情,这样你就可以修复它,这对你更有好处。我举个例子:你检查了是否有文件 A.class.好的。你检查它是否大于0字节?
-
我没有责怪正在使用的工具。我试图了解环境以及它们是否相互影响以及如何影响。这就是为什么我在这里问是否有人以前遇到过。如果我有证据我早就贴出来了。是的,它大于 0 字节。如果看到类没有损坏或其他什么,现在尝试反编译该类。
标签: java tomcat7 classloader tanuki