我继承了一个Java项目,旨在成为多代理开发的平台。我们的想法是您可以创建在平台上运行的“应用程序”。我正在寻找一种分发基础平台的方法,以便最终用户可以将应用程序(可能打包在jar中)添加到预定义的文件夹中,向平台读取的某些清单文件添加对所述jar存在的引用,以及因此可以从中访问文件。
我查看了以下答案,但这些似乎要求平台代码在设计时知道类的名称:
理想情况下,我希望以下结构起作用:
apps.manifest将包含每个应用程序的条目,其中包括jar的路径,以及作为主应用程序(实现公共接口)对象的类的名称。
在我在platform.jar中的主代码中,我想阅读清单,注意有N个应用程序,并且能够调用ApplicationOne appOne = new ApplicationOne(this)
,其中ApplicationOne
是主应用程序的名称app1.jar
中的对象,this
是对来自platform.jar
的对象的引用,该对象包含对应用程序的引用。
如果所有的jar(platform.jar
和应用程序jar)都在用户的类路径中,它是否都可以像上面一样工作?如果是这样,有没有办法临时将目录(和所有子目录)添加到Java中的用户类路径,我可以在运行platform.jar
时运行该路径?我暂时问,因为封闭文件夹应该可以在文件系统上移动。
对此问题的任何建议都表示赞赏,以及有关改进问题的任何建议,以便更清晰,更易于阅读。
由于
答案 0 :(得分:1)
听起来像ServiceLoader API可能有用。
服务是一组众所周知的接口和(通常是抽象的) 类。服务提供者是服务的特定实现。 提供程序中的类通常实现接口和 子类化服务本身定义的类。服务供应商 可以在表单中安装Java平台的实现 扩展,即jar文件放入任何通常的 扩展目录。
请参阅this blog entry其使用情况