我想使用 URLClassLoader 从 jar 存档中加载特定目录中的类。
项目结构如下
/
application.jar
/lib/
mysql.jar
log4j.jar
...
/myClasses/
class1.class
class2.class
...
该 jar 具有以下 list :
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
错误。我做错了什么?
最佳答案
file.getName()
返回 "Class1.class"
而不是 "Class1"
,对吗?删除最后 6 个字符。
此外,如果 Class1 位于包 de.myClasses
中,它应该位于
<your_base_dir>/de/myClasses
如果 Class1 位于顶级包中(无包),那么您应该要求它作为
loader.loadClass("Class1") // no de.mClasses. prefix
关于java - URLClassLoader 找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12388421/