当前位置: 首页 > 后端技术 > Java

MavenShade插件Relocation修改类常量

时间:2023-04-01 15:49:38 Java

Mave的Shade插件经常用来对打包后的文件(Java文件,properties文件)做一些修改,其中RelocationClass函数是非常实用的包重命名功能shade插件,可以处理Packageconflicts,实现依赖包名自定义的功能,但同时在插件配置中容易因为配置错误导致一些问题。下面是问题之一:常量值被修改。背景&现象首先,我们先说说通过配置文件的目的。下面这个配置文件的作用是通过配置文件打包的时候将com开头的包修改为vzr开头。配置文件如下:org.apache.maven.pluginsmaven-shade-plugin3.4.1<过滤器><过滤器>*:*packageshade<配置><重定位><重定位><模式>comvzr修改再修改出现上述现象,发现这个问题是因为导出的包被其他项目依赖时,某个修改了一些类中的常量值。如上图,将静态常量A中com开头的部分和打印中的compress值替换为vzr。这显然不是我们想要的。我们要的是改pacakge的名称Solution如果只想修改包名,比如:com换成vzr,那么配置文件的relocation部分只能这样写:com.vzr.shadedPattern>com.*vzr.*这只会替换包名称,不会溢出到变量名称。但是对于取值以com.开头的常量,还是不能完全避免,所以在使用shade插件的时候要特别注意这一点。本文仅解决了部分问题。有办法彻底解决吗?我也通过这个问题查了一些相关资料。国内有用的资料不多,但是我在ShadePlugin的issues中发现了同样的问题。Shade插件也在转换不应该转换的字符串,但是issue的状态还是open,可能开发者不认为是BUG,而是用户方法的问题,但是从角度来看实际使用中,还是有很多情况是无法避免的,所以在使用这个插件的时候还是要注意一下。推荐两种方法:不要使用太短的通配符重命名,比如直接重命名org下的所有包,尽量匹配完整的包名,当然这种情况要看你的常量有没有相似的值,例如完整的包名称等。