使用清单文件在运行时加载jar

时间:2012-11-12 22:31:47

标签: java jar classpath

我继承了一个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),其中ApplicationOne是主应用程序的名称app1.jar中的对象,this是对来自platform.jar的对象的引用,该对象包含对应用程序的引用。

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

对此问题的任何建议都表示赞赏,以及有关改进问题的任何建议,以便更清晰,更易于阅读。

由于

1 个答案:

答案 0 :(得分:1)

听起来像ServiceLoader API可能有用。

  

服务是一组众所周知的接口和(通常是抽象的)   类。服务提供者是服务的特定实现。   提供程序中的类通常实现接口和   子类化服务本身定义的类。服务供应商   可以在表单中安装Java平台的实现   扩展,即jar文件放入任何通常的   扩展目录。

请参阅this blog entry其使用情况