maven shade

shade

包冲突,现在碰到这样一个问题,如下图,

  1. a依赖b,b依赖c的c1方法
  2. a依赖c的c2方法
  3. 但是c1.0没有c2方法,c2.0没有c1方法

在这里插入图片描述

原因

jvm在加载类时,只会根据包名去加载类,如果一个方法调用了一个类的两个版本,而这两个版本是互相冲突的话,就会抛异常NoSuchMehtodError

解决办法

maven-shade 把其中一个用shade改名,改名的类的包名会变,所以再加载两个不同方法时就是加载的两个不同的类,所以不会报错


<dependencies><dependency><groupId>com.testgroupId><artifactId>shade-cartifactId><version>2.0version>dependency><dependency><groupId>com.testgroupId><artifactId>shade-bartifactId><version>1.0version>dependency>
dependencies>

<dependencies><dependency><groupId>com.testgroupId><artifactId>shade-cartifactId><version>1.0version>dependency>
dependencies>
<build><plugins><plugin><groupId>org.apache.maven.pluginsgroupId><artifactId>maven-shade-pluginartifactId><version>3.2.1version><executions><execution><phase>packagephase><goals><goal>shadegoal>goals><configuration><relocations><relocation><pattern>com.test.shade-cpattern><shadedPattern>shaded.com.test.shade-cshadedPattern>relocation>relocations>configuration>execution><executions>plugin><plugins>	
build>
ref

解决jar包冲突新思路 - maven-shade-plugin


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部