V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
v2e0xAdmin2
V2EX  ›  程序员

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

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

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

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

    22 条回复    2024-05-28 09:50:19 +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

    https://www.v2ex.com/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  
       213 天前
    老哥,还有交流群吗,想了解下,项目里分享的群过期了
    v2e0xAdmin2
        22
    v2e0xAdmin2  
    OP
       211 天前
    @okey #21
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:43 · PVG 04:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.