Java:从外部 .jar 获取类

标签 java class url import buildpath

我在从外部 .jar 文件获取类时遇到问题。我发现this此处加载外部 .jar 的方法,但每当我运行它时,我都会收到 ClassNotFoundException。下面是我正在使用的代码和 here是我正在测试的 .jar。如果有人知道如何解决此问题,请告诉我。谢谢!

这是我的代码:

@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
public void loadJar() throws MalformedURLException {
    URL[] classes = {new URL("jar:file://test.jar!/")};
    URLClassLoader child = new URLClassLoader (classes, this.getClass().getClassLoader());
    try {
        Class classToLoad = Class.forName ("test.PackageTest", true, child);
        Method method = classToLoad.getDeclaredMethod ("test");
        Object instance = classToLoad.newInstance();
        Object result = method.invoke(instance);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}

最佳答案

尝试将 URL[] classes = {new URL("jar:file://test.jar!/")}; 分解为几条语句

File myFile = new File("test.jar");
URL myJarFileURL = new URL("jar", "", "file:" + myFile.getAbsolutePath() + "!/");
URL[] classes = {myJarFileURL};

您可以将 myFile.getAbsolutePath() 发送到记录器或控制台,并查看类加载器期望在哪里找到 test.jar。然后确保 test.jar 位于该位置。

关于Java:从外部 .jar 获取类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881393/

相关文章:

java - 防止hibernate向mysql表添加唯一索引

java - 在外部类中使用微调器,因为所有其他 Activity 都需要

javascript - 选择子类的输入值

asp.net - 从任意 URL 获取值

ios - 在 GET 请求中传递 JSON 对象 : iOS

java - Junit 5标签不适用于Gradle 6.5.1

java - 类型不匹配无法将主 Activity 转换为 fragment

java - 将命令行拆分为参数

c++ - 错误 C2955 : use of class template requires template argument list

c# - 为什么带有 "@"的链接在我的浏览器中有效,但 C# HttpWebRequest 给出 404(远程服务器返回错误 : (405) Method Not Allowed.)