场景
旧项目改造成微服务项目,有些项目存在多个相同路径的Java文件,在运行过程中,时常遇到找不到方法的问题。本篇博客主要是针对此种情况进行问题的解决。
环境
软件 | 版本 |
---|---|
springboot | 2.1.1 |
JDK | 1.8 |
正文
思路
我们这里针对是外部jar包,即很难可以改动文件。所以,我们可以考虑,将这个jar里面的文件重命名进行规避或者移除冲突的文件,生成新的jar包。而这里,我们就要使用maven的shade插件,这个插件的具体介绍请查看下文的连接,自行查看。
方法一:重命名
我们这里使用relocations标签进行设置,样例如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>com.test.annotation</pattern>
<shadedPattern>com.test.annotation.shade</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
以上样例,会将com.test.annotation
开头的路径都更新为com.test.annotation.shade
,避免了路径冲突。这种情况适合于当前应用与线上环境存在jar包冲突的时候使用。
方法二:移除冲突文件
将冲突文件进行过滤,然后重新生成新的依赖。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>com.test/artifact>
<excludes>
<exclude>com/test/annotation/**</exclude>
<exclude>pub/source/LogOperateUtil*</exclude>
<exclude>util/SessionUtil*</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
以上配置会将命中的文件过滤掉,进而规避了该问题。当然,在pom文件里面,引入的依赖就只有需要改动的lib包,记得移除相关的附属依赖,免得最后的包过大,影响效率。
总结
本文梳理了两种方式进行规避相同文件冲突,在使用过程中,请根据不同情况进行方法的抉择。
参考链接
随缘求赞
如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!