如何从特定的.jar请求方法?

时间:2019-04-10 12:05:12

标签: java jar classloader

因此,我想实例化类并使用来自特定.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文件,我特别需要

0 个答案:

没有答案