如何有效区分一个类是业务自己编写的类还是依赖引入的类? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Aresxue
V2EX    Java

如何有效区分一个类是业务自己编写的类还是依赖引入的类?

  •  
  •   Aresxue 2023-03-08 17:11:35 +08:00 2038 次点击
    这是一个创建于 952 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目结构如下:

    xxx(project)

    -- xxx-api(module)

    -- xxx-core(module)

    -- xxx-starter(module)

    项目是一个 maven 的父子项目有 api 、core 、starter 三个模块,有一个诉求是区分一个类是这三个模块里面的还是其它三方库里面的。本身 maven 在打包后所有 jar 都是平铺的并没有区分业务 jar 和依赖 jar ,所以差异要在 maven 打包之前或进行时完成,简单实现的思路就是打包时在业务 jar 中写入个 index 文件来做区分,但这样一来每个类要先获取自身所在的 jar 然后再做判断感觉非常的不优雅,自认为比较理想的实现是在类上打标记,在编译时将所有业务类都打标,但是一直没有想到比较好的实现方式,有做过类似诉求的小伙伴可以指教一下。

    第 1 条附言    2023-03-09 10:47:55 +08:00
    --------------------
    描述的可能还不是很详尽,先描述下目的:
    公司在迭代中台,技术中台提供了一个技术方案用来做平台(业务中台)和业务的分离,这个技术方案通过自定义 container 和 classloader 实现,以完成平台逻辑和业务逻辑分离以及业务与业务之间的隔离( A 业务有问题不会影响 B 业务,新增和删除业务通过热加载和类卸载在线完成),以上为背景,在实现过程中需要上报扩展服务(可以简单理解为通过一个注解标识)的信息,本意是只想要上报自身服务的信息,但由于会引入其它应用的 api ,在这些 api 的 jar 里面也会有它们自已的扩展服务,这样就会上报不属于自己当前容器的扩展服务的信息,所以想要区分是自己定义的扩展服务还是间接依赖引入的扩展服务。

    有些兄弟提出用包名是不合适的,因为从整个项目来说包名都是不确定的,比如 A 项目的包名是 com.xxx.A ,B 项目是 com.xxx.B ,我想要的只有 com.xxx.A ,这些包名是不确定的,通过包名是不太准确也有点 low 的。
    5 条回复    2023-03-14 23:17:31 +08:00
    RedBeanIce
        1
    RedBeanIce  
       2023-03-08 19:22:54 +08:00
    区分业务 jar 和依赖 jar ,所以差异要在 maven 打包之前或进行时完成

    请问一下,区分完了之后,会做什么呢。。打标。打标的作用是什么呢。
    cheng6563
        2
    cheng6563  
       2023-03-08 19:39:36 +08:00
    你没包名吗
    WillingXyz
        3
    WillingXyz  
       2023-03-08 19:40:02 +08:00
    用注解处理器,在编译时在每个类上自动加上注解
    lyxeno
        4
    lyxeno  
       2023-03-08 20:57:32 +08:00
    用包名区分?
    getClass().getPackage().getName()

    但是你这区分出来有啥用吗
    choice4
        5
    choice4  
       2023-03-14 23:17:31 +08:00
    已经提到的一点问题就是目前打包的 jar 是平铺的,如果不怕费事:
    1. 可以使用 maven-dependency-plugin 把这几个依赖项 unpack 到 classes 下一个目录进行打包,同时自定义类加载器适配 jar 内这个目录下的那些类。
    2.也可以直接做 shade 配合 relocation,只是会影响运行时类名,在提供二方三方使用时需要注意,反射也需要注意。

    我使用过方案一完成过一些功能,和你需求不一样但应该能达到一样的效果。
    关于     帮助文档   nbsp; 自助推广系统     博客     API     FAQ     Solana     5826 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 06:18 PVG 14:18 LAX 23:18 JFK 02:18
    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