写了一个 Java 插件框架,大家看看能不能用上 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
v2e0xAdmin2
V2EX    程序员

写了一个 Java 插件框架,大家看看能不能用上

  •  
  •   v2e0xAdmin2 2023-08-15 20:44:28 +08:00 2269 次点击
    这是一个创建于 860 天前的主题,其中的信息可能已经有所发展或是发生改变。

    git 地址: https://github.com/stateIs0/exp

    为了解决公司的业务痛点, 这段时间一直在搞这个东西。看看开源出来能不能帮到其他人,有用的就点个 star ,哈哈

    23 条回复    2025-03-19 17:11:31 +08:00
    zhady009
        1
    zhady009  
       2023-08-15 22:42:12 +08:00 via iPhone
    可以看看 PF4J ?
    v2e0xAdmin2
        2
    v2e0xAdmin2  
    OP
       2023-08-15 22:53:02 +08:00
    @zhady009 #1 嗯嗯,写完之后才看到这个,看起来类似,但是又有点区别
    v2e0xAdmin2
        3
    v2e0xAdmin2  
    OP
       2023-08-16 09:02:25 +08:00
    大概的场景:
    B 端大客户对业务进行定制, 需要对主代码扩展,传统做法是 git 拉取分支,现在基于扩展点的方式进行定制, 可热插拔,需要多个程序可分可合, 支持将多个 springboot 应用合并部署, 或拆开部署,扩展点类似 swagger 文档 doc, 用于类插件系统管理平台进行展示,

    详细的博客地址: http://thinkinjava.cn/2023/08/15/2023/exp/
    muyiluop
        4
    muyiluop  
       2023-08-16 09:06:44 +08:00
    这个我还真能用上,之前搞物联网设备接入,设备种类太多,协议各种各样,也是搞了一个简单的热插拔的插件,但是解决不了一个问题,就是怎么防恶意代码,我们这支持三方开发,如果写个 System.exit() 或者其他会出现导致程序崩溃的代码,比如 jni 调用第三方库出现个什么内存异常啥的,程序就容易出问题,只能每个三方的不信任插件单独运行。请教下你是怎么处理这种情况的呢
    v2e0xAdmin2
        5
    v2e0xAdmin2  
    OP
       2023-08-16 09:24:25 +08:00 via iPhone
    @muyiluop 用 groovy
    v2e0xAdmin2
        6
    v2e0xAdmin2  
    OP
       2023-08-16 09:47:14 +08:00 via iPhone
    @muyiluop 详细的说,就是把底层的 classloader 换成 groovy 引擎,这个可以支持代码检查,比如 system-exit
    iosyyy
        7
    iosyyy  
       2023-08-16 09:58:01 +08:00
    看着侵入性好像有点强? 赶紧不算实用
    v2e0xAdmin2
        8
    v2e0xAdmin2  
    OP
       2023-08-16 10:06:13 +08:00
    @iosyyy #7 嗯,如果考虑少点侵入性的话,就需要非常多的配置来描述,比如 n 年前的 spring xml ,是个取舍问题;另外侵入性,这个框架都是基于 spi 和 Interface 来编程的,随时可替换成自己的的 spi 实现(如果认可这个 api 的话)
    zxCoder
        9
    zxCoder  
       2023-09-24 11:35:36 +08:00
    这个能结合 spring 吗?
    v2e0xAdmin2
        10
    v2e0xAdmin2  
    OP
       2023-09-24 12:32:40 +08:00
    @zxCoder #9 必须可以
    zxCoder
        11
    zxCoder  
       2023-09-24 13:23:53 +08:00
    @v2e0xAdmin2

    t/976638#reply1

    能实现这样的功能吗?我看了你代码仓库的 example ,没咋看懂
    v2e0xAdmin2
        12
    v2e0xAdmin2  
    OP
       2023-09-24 13:52:12 +08:00   1
    @zxCoder #11 完全可以,你的场景就是我们的场景
    v2e0xAdmin2
        13
    v2e0xAdmin2  
    OP
       2023-09-24 13:54:52 +08:00
    @zxCoder #11 可以提 issue 或者 钉钉群
    zxCoder
        14
    zxCoder  
       2023-09-24 14:24:18 +08:00
    支持 springboot3 吗
    zxCoder
        15
    zxCoder  
       2023-09-24 14:33:06 +08:00
    没找到相关的依赖包
    v2e0xAdmin2
        16
    v2e0xAdmin2  
    OP
       2023-09-24 14:36:59 +08:00   1
    @zxCoder #14 支持 springboot 3 ,在另外一个 project 里; https://github.com/stateIs0/open-exp-springboot3
    zxCoder
        17
    zxCoder  
       2023-09-24 14:55:28 +08:00
    为啥没放 maven 上,方便点
    v2e0xAdmin2
        18
    v2e0xAdmin2  
    OP
       2023-09-24 15:24:50 +08:00
    @zxCoder #17 用的人还不多,就没放 maven 了,可以考虑放 maven 仓库
    zxCoder
        19
    zxCoder  
       2023-09-24 15:46:13 +08:00
    @v2e0xAdmin2 可以搞一个,刚刚想在我的项目中测试,但是用不了,还得自己编译到本地仓库
    zerofancy
        20
    zerofancy  
       2023-12-16 03:20:06 +08:00 via Android
    @muyiluop 我有个想法,插件用自定义 classloader 加载,是否可以破坏双亲委派,给 System 类搞个 proxy
    okey
        21
    okey  
       2024-05-27 00:02:04 +08:00
    老哥,还有交流群吗,想了解下,项目里分享的群过期了
    v2e0xAdmin2
        22
    v2e0xAdmin2  
    OP
       2024-05-28 09:50:19 +08:00
    @okey #21
    Dlin
        23
    Dlin  
       278 天前
    请教一下:资源回收是依赖 spring 的管理么?假如插件中启动了一个 thread 并无限循环一个任务。这种是不是就没法卸载时回收了这个资源了,有没有监测手段呢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1062 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 22:58 PVG 06:58 LAX14:58 JFK 17:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86