动态加载扩展另一个的类(从jar)

时间:2015-04-03 13:18:25

标签: java classloader abstract urlclassloader

我正在尝试创建一个能够从外部.jar文件加载类的应用程序。但是,我需要引用我将按其类型加载的类(它是Sax解析器的DefaultHandler的孙类)。

我以为我这样做:

我将定义一个抽象类Hammer extends DefaultHandler

外部文件中的类将扩展Hammer(让我们调用外部类SpecialHammer)

我将使用URLLoader加载SpecialHammer。


问题在于我不知道如何(以及在​​何处)定义Hammer以确保应用程序认为它正在加载的SpecialHammer实际上扩展了它知道的Hammer。我尝试在应用程序和外部.jar中放置相同的Hammer类,但它不起作用:/

我基本上需要知道如何在两个罐子之间分享一个抽象类,以便他们都知道他们会在同一个班级中受到影响。

如果有任何帮助,我会使用Eclipse。

2 个答案:

答案 0 :(得分:0)

我建议您使用Maven来实现项目依赖性。

此处提供更多信息:https://maven.apache.org/guides/getting-started/index.html

答案 1 :(得分:0)

理论上应用程序jar需要保存一个接口,这个接口需要通过用于解析的类进行扩展,因此最好将它放在客户端和处理应用程序可以共享的依赖项中。

我认为在你的例子中要分享的类是Hammer(抽象类)和DefaultHammer,这样客户端可以选择扩展它们的类。

因此,您将在common.jar中使用抽象类Hammer和DefaultHammer,并且application.jar和client.jar都将使用common.jar作为依赖项。

可能有点偏离主题,但也许更好的解决方案,取决于用户/客户端将使用Java的SPI接口(或自己动手)。或者也许是Byteman,它允许你将代码注入JVM,(是一个在javac上包装-agent选项的DSL)。

Blog about using Byteman