Java URLClassLoader可以';我找不到课

Java URLClassLoader可以';我找不到课,java,classloader,urlclassloader,Java,Classloader,Urlclassloader,我想使用URLClassLoader从jar归档文件加载特定目录中的类 项目结构如下 / application.jar /lib/ mysql.jar log4j.jar ... /myClasses/ class1.class class2.class ... jar具有以下清单: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.3 Created-By: 1.7.0_07-b10 (Oracle Corpo

我想使用URLClassLoader从jar归档文件加载特定目录中的类

项目结构如下

/
 application.jar
 /lib/
  mysql.jar
  log4j.jar
  ...
 /myClasses/
  class1.class
  class2.class
  ...
jar具有以下清单:

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

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

中,您可以编写tjat来从jar归档加载类,但在代码中,您可以将原始目录(“/path/to/my/root/folder/myClasses/”)作为URLClassLoader的参数。您必须在这里指定jar文件。是的,这是正确的。我的应用程序驻留在jar存档中,我想从该存档中加载目录中的其他类您的目标是访问存储在jar中的jar中的类吗?这是行不通的,我相信搜索会找到很多帖子,告诉你为什么以及如何解决这个问题。不,我已经在我的应用程序中这样做了。我这样写是为了节省空间,我会修改它。
loader.loadClass("Class1") // no de.mClasses. prefix