在打包在war中的瘦ear中,类加载面临类加载问题。还有其他打包的ejb模块。有些可以通过春天装载,而有些则不能。
想象一下以下场景:
someApp.ear
|- someEJBs1.jar
|- someEJBs2.jar
...
|- someEJBsX.jar
|- someWar.war如果我尝试从someWar.war通过spring访问一些类,如下所示:
java.lang.ClassNotFoundException。不知道问题出在哪里。我的MANIFEST.MF根本不包含任何类路径信息。
我已经在想,在运行时(可能在调试期间),是否有任何方法可以查看加载的类,或者是否可以查看为特定war文件提供的类路径?
我在glassfish 3.1.1中运行(这是必需的,不可能对此做任何更改)。
发布于 2013-01-15 16:30:10
在代码中尝试以下调试函数:
//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-16 08:17:55
好了,终于找到了根本原因,我忽略了春季xml吐露中错误的包定义问题。:)
我想我应该正确地阅读错误信息。再检查一遍我认为是正确的。(对我来说,这不是什么新鲜事)
现在它对我有用了。
https://stackoverflow.com/questions/14342107
复制相似问题