Java 使用ClassLoader加载JAR文件时发生ClassNotFoundException
我从jar文件中获取了关于创建和使用类的指导(和代码) 我创建了一个Test.java文件:Java 使用ClassLoader加载JAR文件时发生ClassNotFoundException,java,eclipse,jar,classloader,Java,Eclipse,Jar,Classloader,我从jar文件中获取了关于创建和使用类的指导(和代码) 我创建了一个Test.java文件: package a; public class Test { public String print(){ return "TestLALALA"; } } 并使用以下内容创建了一个jar文件: jar cvf0 Test.jar Test.java 当我(通过命令行)提取jar时,类是完整的 我将jar放在Eclipse项目的“libs”文件夹中。我可以在“库
package a;
public class Test {
public String print(){
return "TestLALALA";
}
}
并使用以下内容创建了一个jar文件:
jar cvf0 Test.jar Test.java
当我(通过命令行)提取jar时,类是完整的
我将jar放在Eclipse项目的“libs”文件夹中。我可以在“库”下的“构建路径”项目中看到它
以下代码命中ClassNotFoundException:
URL[] urls = new URL[1];
try {
File file = new File("C:\\Eclipse\\Demo\\libs\\Test.jar");
urls[0] = file.toURI().toURL();
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
URLClassLoader loader = new URLClassLoader (urls);
Class classToLoad = null;
if(loader!=null)
{
try {
classToLoad = loader.loadClass("a.Test");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
我错过了什么
谢谢大家! 看起来您只是将未编译的.java文件添加到JAR中,而不是将已编译的.class文件添加到JAR中
JAR中的文件应该是
a/Test.class
,因此您需要确保a
目录存在于其中以表示包路径。目前,该文件似乎存在于JAR的根目录中,而不是子目录中。使用Eclipse中的JAR导出来确保正确创建该文件
你可以试试这个:
Test test1 = new Test();
Class.forName("a.Test");
您可以删除测试1。。。如果要测试动态加载。
但是,我真的不明白为什么要使用UrlClassLoader使它变得如此复杂。我添加了一条注释,说明了JAR中也需要存在包路径的目录。是的,谢谢。我是从“a”包文件夹中的批处理文件运行它的。看起来还可以,因为它现在正在工作(不是代码,而是jar被识别为一个库,可以直接调用测试类)!非常感谢。