簡體   English   中英

URLClassloader依賴項

[英]URLClassloader Dependencies

在我之前的問題中,我詢問了如何加載遠程jar文件。 我目前的代碼是這樣的:

//f is the path to the jar
URLClassLoader loader = new URLClassLoader(new URL[]{f.toURI().toURL()});
Class<?> jarClass = Class.forName(main, true, loader);
Class<? extends Module> module = jarClass.asSubclass(Module.class);

Constructor<? extends Module> constructor = module.getConstructor();
System.out.println(constructor);

Module module = constructor.newInstance();

這很好用,但遠程加載的模塊擴展了一個加載它們的jar中的類,這會產生以下錯誤:

引起:java.lang.ClassNotFoundException:package.whatever.Module,我認為是因為它使用的是URLClassLoader而不是getClass()。getClassLoader()..如何使用URLClassLoader然后回退到默認值?

謝謝,
巴特

您可以將應用程序類加載器設置為url類加載器的父級:

URLClassLoader loader = new URLClassLoader(
       new URL[]{f.toURI().toURL()}, Module.class.getClassLoader());

Oracle Java教程 (類加載機制):

Java平台使用委托模型來加載類。 基本思想是每個類加載器都有一個“父”類加載器。 在加載類時,類加載器首先將對類的搜索“委托”到其父類加載器,然后再嘗試查找類本身。

我遇到了同樣的問題而我正在使用Java 9,將其降級為Java 8解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM