首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URLClassLoader找不到类

URLClassLoader找不到类
EN

Stack Overflow用户
提问于 2012-09-12 20:43:07
回答 2查看 3.1K关注 0票数 1

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

项目结构如下

代码语言:javascript
复制
/
 application.jar
 /lib/
  mysql.jar
  log4j.jar
  ...
 /myClasses/
  class1.class
  class2.class
  ...

jar具有以下清单:

代码语言:javascript
复制
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/中的所有文件,并尝试加载特定的类(它们都具有相同的包),如下所示:

代码语言:javascript
复制
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错误。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-12 21:16:15

您应该将已编译的类放在与其包对应的目录中。所以类de.myClasses.Class1应该在目录/myClasses/de/myClasses/中。

票数 0
EN

Stack Overflow用户

发布于 2012-09-12 20:53:58

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

另外,如果Class1在包de.myClasses中,它应该在

代码语言:javascript
复制
<your_base_dir>/de/myClasses

如果Class1在最上面的包中(没有包),那么您应该这样请求它

代码语言:javascript
复制
loader.loadClass("Class1") // no de.mClasses. prefix
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12388421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档