因此,我想实例化类并使用来自特定.jar的那些类的方法。前面提到的方法和类在当前项目中也存在,特别是不能使用。
这样做的目的是因为我想这样做,以便我可以将提议的项目新版本以jar的形式放到projects文件夹中,并且它将在以下方面对旧方法与新方法进行一些分析:他们输出什么。或者至少产生一种更易于使用的东西,而不是费力地运行两者然后手动将数据放在一起。
我想到的第一步是确保我可以将特定的.jar中的类定位为目标,以使其运行,因为这样做要简单得多。
突然出现的问题是,我似乎无法使java定位到特定的.jar。
我一直盯着这个线程(How should I load Jars dynamically at runtime?)已经有一段时间了,但是我无法正常工作。
public class TestNewUpload {
public static void main(String[] args) {
File newUpload = new File("testNew//newUpload.jar");
URLClassLoader child = null;
try {
child = new URLClassLoader(new URL[] { newUpload.toURI().toURL() });
} catch (MalformedURLException e) {
e.printStackTrace();
}
Class classToLoad = null;
try {
classToLoad = child.loadClass("package1.package2.className");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
className foo = null;
try {
foo = (className) classToLoad.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(foo.property());
}
}
因此,要测试该方法是否有效,我在newUpload.jar上将className的某个属性设置为5,但在将运行代码的当前项目中将其设置为6。它总是返回6,表示
classToLoad = child.loadClass("package1.package2.className");
此行实际上是在访问当前类,而不是newUpload.jar中的类。因为我已经尽力确保使用newUpload.toURI()。toURL()构造URLClassLoader,所以我希望child.loadClass的任何用法都将专门用于构造它的文件中显然还没有,我的知识水平到此结束。
作为结尾,我对这种事情还比较陌生,所以我希望我的问题足够详细,并且我并没有做过任何荒谬的事情。
澄清:
我试图让我的代码专门从.jar文件指向的.jar文件中运行类
File newUpload = new File("testNew//newUpload.jar");
但是,
System.out.println(foo.property());
表明
child.loadClass("package1.package2.className");
正在加载当前项目请求的类,而不是项目内部的.jar文件。
.jar文件和当前项目的 BOOT 中都有package1.package2.className目录,我不知道如何将classLoader特别指向.jar文件,我特别需要