java - URLClassLoader 找不到类

标签 java classloader urlclassloader

我想使用 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/

相关文章:

java - Spark 无法从 webjar 加载静态文件

java - JarFileFactory 缓存 jar 文件

java - 在没有接口(interface)调用或反射调用的情况下使用类加载器创建的对象?

java - 处理一个类加载器

java - 如何设置一个系统来读取我使用 R 创建的 PMML 文件?

java - 是否可以使用java读取传入数据流,从服务器到.exe客户端(使用C++编码)?

java - Tomcat 中的自定义 MBean - 创建 InitialContext 时找不到 javaURLContextFactory

java - SecureClassLoader 的目的是什么?

java - Spring Boot 中内容类型为 application/x-www-form-urlencoded 的请求的自定义反序列化器

java - 如何知道一个 jar 文件是否已经在运行?