maven shade
shade
包冲突,现在碰到这样一个问题,如下图,
- a依赖b,b依赖c的c1方法
- a依赖c的c2方法
- 但是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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
