V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Weixiao0725
V2EX  ›  Java

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

  •  
  •   Weixiao0725 · 2016-09-13 17:47:26 +08:00 · 3071 次点击
    这是一个创建于 2979 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    2 条回复    2016-09-13 18:04:57 +08:00
    fwrq41251
        1
    fwrq41251  
       2016-09-13 17:59:00 +08:00
    你说的方法就是对的了。
    一般 java 应用服务器对某个应用都有独立的 classloader ,这样就可以不必重启整个服务器而添加新的应用了。
    fwrq41251
        2
    fwrq41251  
       2016-09-13 18:04:57 +08:00
    楼主可以看一下 OSGi
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2694 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 03:58 · PVG 11:58 · LAX 19:58 · JFK 22:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.