繁体   English   中英

URLClassLoader找不到类

[英]URLClassLoader can't find classes

我想使用URLClassLoader从jar档案中加载特定目录中的类。

项目结构如下

/
 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错误。 我究竟做错了什么?

file.getName()返回"Class1.class"而不是"Class1" ,对吗? 删除最后6个字符。

另外,如果Class1在软件包de.myClasses则它应该位于

<your_base_dir>/de/myClasses

如果Class1位于顶层包装(无包装)中,则应按以下要求

loader.loadClass("Class1") // no de.mClasses. prefix

您应该将编译后的类根据其包放在目录中。 因此,类de.myClasses.Class1应该位于目录/myClasses/de/myClasses/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM