0

我继承了一个旨在成为多代理开发平台的 Java 项目。这个想法是您可以创建在平台上运行的“应用程序”。我正在寻找一种分发基础平台的方法,以便最终用户可以将应用程序(可能打包在 jar 中)添加到预定义的文件夹中,将对所述 jar 存在的引用添加到平台读取的某个清单文件中,以及因此可以从中访问文件。

我查看了以下答案,但这些似乎要求平台代码在设计时知道类的名称:

理想情况下,我希望以下结构起作用:

  • 主目录:platform.jar、apps.manifest、Apps(目录)
  • Apps/App1/app1.jar, Apps/App2/app2.jar, ..., Apps/AppN/appN.jar

apps.manifest 将包含每个应用程序的条目,其中将包括 jar 的路径,以及作为主要应用程序(实现公共接口)对象的类的名称。

在我的 platform.jar 中的主要代码中,我想阅读清单,注意有 N 个应用程序,并且能够调用ApplicationOne appOne = new ApplicationOne(this)whereApplicationOne是主要应用程序对象的名称 in app1.jar,并且是对保存this的对象的引用platform.jar对应用程序的引用。

如果所有 jars(platform.jar和应用程序 jars)都在用户的类路径中,它会像上面那样工作吗?如果是这样,有没有办法临时将一个目录(和所有子目录)添加到 Java 中的用户类路径中,我可以在运行时运行它platform.jar?我临时询问,因为封闭文件夹应该可以在文件系统上移动。

任何关于这个问题的建议,以及关于改进问题的任何建议都表示赞赏,因此它更清晰、更容易阅读。

谢谢

4

1 回答 1

1

听起来ServiceLoader API 可能有用。

服务是一组众所周知的接口和(通常是抽象的)类。服务提供者是服务的具体实现。提供者中的类通常实现服务本身中定义的类的接口和子类。服务提供者可以以扩展的形式安装在 Java 平台的实现中,即将 jar 文件放置在任何常用的扩展目录中。

请参阅此博客条目以了解其用法

于 2012-11-12T23:39:45.460 回答