java - 在运行时使用 list 文件加载 jar

标签 java jar classpath

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

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

理想情况下,我希望以下结构能够工作:

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

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

在 platform.jar 中的主代码中,我想阅读 list ,注意到有 N 个应用程序,并且能够调用 ApplicationOne appOne = new ApplicationOne(this) 其中 ApplicationOneapp1.jar 中主应用程序对象的名称,this 是对 platform.jar 中该对象的引用code> 保存对应用程序的引用。

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

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

谢谢

最佳答案

听起来像 ServiceLoader API可能有用。

A service is a well-known set of interfaces and (usually abstract) classes. A service provider is a specific implementation of a service. The classes in a provider typically implement the interfaces and subclass the classes defined in the service itself. Service providers can be installed in an implementation of the Java platform in the form of extensions, that is, jar files placed into any of the usual extension directories.

参见this blog entry关于它的使用

关于java - 在运行时使用 list 文件加载 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352664/

相关文章:

java - 非静态方法

java - LinkedList 的 Collections.sort() 不起作用

java - 从 GNOME 运行时如何获取可运行的 .jar 文件的位置

java - Yui Compressor 文件在 Jar 打包之前未刷新

java - NoClassDefFound错误: javafx/beans/InvalidationListener

java - 无法在 Java 中找到或加载主类

java - LWJGL 仅旋转屏幕上的一个对象

java - Jersey:以 XML 形式读取 Content-Type:plain/text 响应

java - Eclipse 中的 list 文件

java - 我应该将属性文件放在哪里进行测试?