2013-01-15 63 views
0

我正面臨類加載問題,我的皮包骨骼war打包在ear。 哪裏還有其他ejb模塊打包。有些可以通過彈簧加載,有些則不可以。ClassNotFoundException對於骨幹戰

想象以下場景:

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

如果我從someWar.war嘗試通過春季訪問存在於一些類:

  • someEJBs1.jar它的工作原理
  • 但對於那些在someEJBs2.jar我得到java.lang.ClassNotFoundException

不知道問題出在哪裏。 我的MANIFEST.MF根本不包含任何類路徑信息。

我已經在想如果有什麼方法可以在運行時(也許在調試期間)看到加載的類,或者可能爲特定的war文件提供的類路徑?

我運行在glassfish 3.1.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")); 
} 

要獲得所有加載的類,在getAllLoadedClasses方法將是有益的。 See Here

+0

感謝您的想法!我會檢查的。 –

+1

我更新了我的答案。看一看。 –

+0

好吧,測試過它,但它沒有提供任何有用的信息給我說實話。因爲我無法看到所有可供類加載的罐子。但只有一些基本的玻璃魚缸。無論如何,標記爲正確的,因爲它似乎是我可以從類加載器中獲得的所有東西。此外,你回答我的問題,毫無疑問,在該:) –

0

好的,終於找到了根本原因,我忽略了在我的spring xml configs中包定義錯誤的問題。 :)

我應該正確讀取錯誤信息。並仔細檢查我認爲是正確的。 (好吧,我的情況並不新鮮)

現在它適用於我。

+0

很高興知道它的作品 –