2012-07-21 34 views
0

我試圖從JAR文件中使用反射加載一個類。該JAR文件有一個實現不同JAR文件中的接口的類。包含該接口的JAR文件由項目知道,因爲它位於其構建路徑中。這個JAR文件也在JBoss 6的兩個文件夾中,分別是「client」和「common/lib」。用反射在JBoss 6中加載JAR文件

當我嘗試使用類java.net.URLClassLoader的loadClass方法動態加載類來創建對象時,會發生問題。關於項目和JAR文件共享的接口,拋出ClassNotFoundException。我通過以下方法獲得的ClassLoader:

public static ClassLoader getClassLoader(final String fileName) { 
    final File file = new File(fileName); 
    URL url; 
    ClassLoader classLoader = null; 
    try { 
     url = file.toURL(); 
     final URL[] urls = new URL[]{url}; 
     classLoader = new URLClassLoader(urls); 

    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return classLoader; 
} 

我因爲類是File變量,它包含對JAR,這是不是在JBoss中引用加載使用這個類加載器的類。

我是否必須將JAR與接口包含在JBoss的不同文件夾中?

+0

你如何得到你的URLClassLoader實例?你有沒有嘗試:java.lang.Thread.getContextClassLoader()。loadClass()? – 2012-07-21 19:38:32

+0

我試圖以這種方式,但該類不在當前線程中,它在JAR文件中。我編輯了這個問題以提供更多信息。 – 2012-07-22 10:23:17

回答

0

您只能引用Jboss類路徑中的類。所以如果jar沒有被jboss加載,你就無法加載它。

+0

我已經嘗試在我的EJB項目的類路徑中包含帶有接口的JAR,但它不起作用。我可以使用我的項目中的接口實例化JAR的對象,但是當我嘗試加載具有此接口的實現的其他JAR時,會發生異常。 最奇怪的是,它在一臺機器上正確運行,但不在其他機器上運行。我已經嘗試將JBoss和Eclipse複製到另一個,但它仍然不起作用。 – 2012-07-22 16:12:02

+0

看看這裏它可能會幫助你:http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath – Tomer 2012-07-22 16:15:55

+0

也檢查這一個:http://stackoverflow.com/questions/60764/how - 應該在運行時動態加載罐子 – Tomer 2012-07-22 16:16:34