【问题标题】:ClassLoader class dependeny (plugin)ClassLoader 类依赖(插件)
【发布时间】:2014-01-16 16:56:16
【问题描述】:

我想问一下 UrlClassLoaders。我编写了一个运行良好的主 .jar 文件。现在我想让它能够从它的一个文件夹中加载插件。我一直写到它在文件夹中找到 .jar 文件,可以在其中列出它们的类(它们的名称、路径)。问题是当我让他找到那个类(创建它的实例)时,他们不会找到它从我的主 jar 文件继承的类,如下所示:

IN MAIN JAR:
-class Expansion { ... }

In a plugin jar:
-class ExpansionA extends MainJar.Expansion { ... }

所以当我要求 UrlClassLoader 解析“ExpansionA”类时,它会在插件 jar 中搜索“Expansion”类而不是 MainJar,然后插件 jar 中没有“Expansion”类,因为它作为资源库从 MainJar 继承...并在 defineClass 方法时抛出 NoDefFoundForClassError 异常。我怎样才能告诉他也检查 MainJar 中的课程? (它不仅是关于 1 个类,而且我希望插件能够从 MainJar 继承任何类)。你能帮帮我吗?

【问题讨论】:

    标签: java inheritance plugins classloader urlclassloader


    【解决方案1】:

    ClassLoaders 有一个父级,加载请求首先被委派给该父级。为确保您正在创建的新类加载器可以访问类Expansion,您应该将新ClassLoader 的父级设置为您的类ClassLoaderExpansion

    ClassLoader myLoader=newURLClassLoader(urls, Expansion.class.getClassLoader());

    这不仅确保Expansion 类将被myLoader 找到,它还将保证它解析为相同的运行时类(首先询问父级)。如果插件 jar 包含该类的副本,这一点很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2017-10-28
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多