我想使用URLClassLoader從jar-archive加載特定目錄中的類。URLClassLoader找不到類
這個項目的結構如下
/
application.jar
/lib/
mysql.jar
log4j.jar
...
/myClasses/
class1.class
class2.class
...
罐子有以下表現:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_07-b10 (Oracle Corporation)
Main-Class: de.application.start
Class-Path: lib/mysql.jar lib/log4j.jar lib/....jar
我目前做的是遍歷所有文件內/myClasses/
並試圖加載特定的類(他們都有相同的包裝)像這樣:
File classDir = new File("/path/to/my/root/folder/myClasses/");
URL[] url = { classdir.toURI().toURL() };
ClassLoader loader = new URLClassLoader(url);
for (File file : classDir.listFiles()) {
String filename = StringUtil.getFilenameWithoutExtension(file.getName());
loader.loadClass("de.myClasses." + filename).getConstructor().newInstance();
但是,即使這些文件顯然存在,我總是會得到一個java.lang.ClassNotFoundException: de.myClasses.class1
錯誤。我究竟做錯了什麼?
你可以編寫你想從jar壓縮包中加載類的tjat,但是在你的代碼中,你將原始目錄(「/ path/to/my/root/folder/myClasses /」)作爲URLClassLoader的參數。你必須在這裏指定jar文件。 – korifey
是的,這是正確的。我的應用程序駐留在一個jar文件中,並且在該存檔之外我想在目錄中加載其他類 –
您的目標是訪問存儲在存儲在jar中的jar中的類嗎?這是行不通的,我相信搜索會出現很多帖子,告訴你爲什麼以及如何解決它。 – parsifal