我有一个具有以下结构的项目:
+---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?
答案 0 :(得分:0)
通常,用户将从脚本(或带有一些可配置的java exe启动器的窗口)启动应用程序。 在脚本中,您只需以类似于此的方式将插件文件夹添加到类路径中:
java -cp plugin/* -jar app.jar