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

2023-03-08 17:11:35 +08:00
 Aresxue

项目结构如下:

xxx(project)

-- xxx-api(module)

-- xxx-core(module)

-- xxx-starter(module)

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

1282 次点击
所在节点    Java
5 条回复
RedBeanIce
2023-03-08 19:22:54 +08:00
区分业务 jar 和依赖 jar ,所以差异要在 maven 打包之前或进行时完成

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

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

我使用过方案一完成过一些功能,和你需求不一样但应该能达到一样的效果。

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

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

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

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

© 2021 V2EX