我正在尝试创建一个能够从外部.jar文件加载类的应用程序。但是,我需要引用我将按其类型加载的类(它是Sax解析器的DefaultHandler的孙类)。
我以为我这样做:
我将定义一个抽象类Hammer extends DefaultHandler
外部文件中的类将扩展Hammer(让我们调用外部类SpecialHammer)
我将使用URLLoader加载SpecialHammer。
问题在于我不知道如何(以及在何处)定义Hammer以确保应用程序认为它正在加载的SpecialHammer实际上扩展了它知道的Hammer。我尝试在应用程序和外部.jar中放置相同的Hammer类,但它不起作用:/
我基本上需要知道如何在两个罐子之间分享一个抽象类,以便他们都知道他们会在同一个班级中受到影响。
如果有任何帮助,我会使用Eclipse。
答案 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)。