项目结构如下:
xxx(project)
-- xxx-api(module)
-- xxx-core(module)
-- xxx-starter(module)
项目是一个 maven 的父子项目有 api 、core 、starter 三个模块,有一个诉求是区分一个类是这三个模块里面的还是其它三方库里面的。本身 maven 在打包后所有 jar 都是平铺的并没有区分业务 jar 和依赖 jar ,所以差异要在 maven 打包之前或进行时完成,简单实现的思路就是打包时在业务 jar 中写入一个 index 文件来做区分,但这样一来每个类要先获取自身所在的 jar 然后再做判断感觉非常的不优雅,自认为比较理想的实现是在类上打标记,在编译时将所有业务类都打标,但是一直没有想到比较好的实现方式,有做过类似诉求的小伙伴可以指教一下。
1
RedBeanIce 2023-03-08 19:22:54 +08:00
区分业务 jar 和依赖 jar ,所以差异要在 maven 打包之前或进行时完成
请问一下,区分完了之后,会做什么呢。。打标。打标的作用是什么呢。 |
2
cheng6563 2023-03-08 19:39:36 +08:00
你没包名吗
|
3
WillingXyz 2023-03-08 19:40:02 +08:00
用注解处理器,在编译时在每个类上自动加上注解
|
4
lyxeno 2023-03-08 20:57:32 +08:00
用包名区分?
getClass().getPackage().getName() 但是你这区分出来有啥用吗 |
5
choice4 2023-03-14 23:17:31 +08:00
已经提到的一点问题就是目前打包的 jar 是平铺的,如果不怕费事:
1. 可以使用 maven-dependency-plugin 把这几个依赖项 unpack 到 classes 下一个目录进行打包,同时自定义类加载器适配 jar 内这个目录下的那些类。 2.也可以直接做 shade 配合 relocation,只是会影响运行时类名,在提供二方三方使用时需要注意,反射也需要注意。 我使用过方案一完成过一些功能,和你需求不一样但应该能达到一样的效果。 |