3

我有一个具有以下结构的项目:

+---main
|   \pom.xml
+---module1
|   \pom.xml
+---module2
|   \pom.xml
+---module3
|   \pom.xml
+---module4
|   \pom.xml
+---pom.xml

模块使用ServiceLoader机制来注册它们的服务。主类在main模块中,该模块还负责使用ServiceLoader机制在类路径中加载服务。问题是main模块不知道module1, module2,module3并且module4因为它们是由用户独立安装的。我想要的是在启动程序时将这些模块中的所有类添加到类路径中,以便 ServiceLoader 知道这些模块中的服务。

目前,我在运行时从main模块加载这些模块,但这似乎不是解决这个问题的好方法,因为 IDE 不知道这些模块,而且加载这些模块似乎需要更多时间运行。我已经研究过像 Elasticsearch 和 PrestoDB 这样的模块化 Java 项目是如何处理这个问题的,但似乎它们都在运行时加载了已安装的模块。

在开发模块化 Java 应用程序时如何处理这个问题?假设我有一个名为 plugins 的目录,其中包含用户安装的模块的 jar 文件,有没有办法使用 maven 插件使用包含该目录中所有 jar 的类路径来启动应用程序?还是我必须在运行时加载这些罐子?

4

1 回答 1

0

通常用户会从脚本启动应用程序(或者在带有一些可配置的 java exe 启动器的窗口中)。在脚本中,您可以简单地将插件文件夹添加到您的类路径中,类似于以下方式:

java -cp plugin/* -jar app.jar
于 2015-07-30T01:07:50.820 回答