Java 如何动态加载一个子模块的所有 jar 包?

2016-09-13 17:47:26 +08:00
 Weixiao0725

首先描述一下场景,我有一个 java 服务在 linux 上运行,然后想动态的增加一个子模块到该服务上,被服务调用(子模块继承了服务定义好的一个接口,或者通过注解标注扫描)。现在想实现的是,不重启该服务,可以直接调用增加的子模块(该子模块自己内部有自己的 lib/*.jar ),如果可以重启服务的话,我可以选择重新指定 classpath ,这样就不会出现 ClassNotFoundException 的异常了。不知道 Java 怎么实现这种动态加载和识别呢?目前想到的方案就是自己写一个 classloader 去 Load 子模块的类极其引用到的所有 jar 包。谢谢!

3086 次点击
所在节点    Java
2 条回复
fwrq41251
2016-09-13 17:59:00 +08:00
你说的方法就是对的了。
一般 java 应用服务器对某个应用都有独立的 classloader ,这样就可以不必重启整个服务器而添加新的应用了。
fwrq41251
2016-09-13 18:04:57 +08:00
楼主可以看一下 OSGi

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/305997

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX