【发布时间】:2015-05-09 13:48:21
【问题描述】:
我有一个具有以下结构的项目:
+---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 的类路径启动应用程序?还是我必须在运行时加载这些 jar?
【问题讨论】:
-
这听起来可能太简单了,在这种情况下我没有正确理解您的问题:如果运行应用程序时存在 jar 文件/类,那么只需将文件夹添加到类路径( -cp 文件夹/*)?
标签: java maven classpath classloader serviceloader