我有一个具有以下结构的项目:
+---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 的类路径来启动应用程序?还是我必须在运行时加载这些罐子?