maven-shade-plugin主要用于创建uber-jar(也称为fat-jar或assembly jar),即将项目的所有依赖项(包括传递依赖项)打包到一个单独的JAR文件中。此外,它还可以重命名包、排除类、优化JAR等,以解决类路径冲突和减少JAR文件大小。 2. 分析项目中jar冲突的原因 JAR冲突通常发生在以下情况: 不同的依赖项包含相同类的不同...
此时可以考虑使用maven-shade-plugin插件,jar包冲突解决方案最后介绍。 依赖传递 首先我们需要了解jar包依赖的传递性。 关于依赖作用范围详解见:【Maven】属性scope依赖作用范围详解。 当我们需要A的依赖的时候,就会在pom.xml中引入A的jar包;而引入的A的jar包中可能又依赖B的jar包,这样Maven在解析pom.xml的时候,会依...
3、利用maven-shade-plugin的重定位类(Relocating Classes)功能,把依赖的第三方jar包重命名后打包到项目的jar包 比如Flink的大多数依赖项,如guava、netty、jackson等,都被Flink的维护人员通过重定位类维护。 这种解决方案比较实用,但是很难解决第三方依赖之间的冲突。 4、类隔离策略 为了解决运行时类冲突,很多技术都实...
在运行应用程序时,只需使用生成的JAR文件作为输入即可。由于JAR文件包含了所有依赖项,因此无需担心版本冲突问题。总的来说,使用Maven的shade插件可以有效地解决版本冲突问题。通过创建一个包含所有依赖项的“超级”JAR文件,并对某些包进行重命名,我们可以确保应用程序在运行时能够正确加载所需的类和方法。这种方法适用于...
pom.xml中添加maven-shade-plugin组件(作用是将依赖的包在package阶段一起打入jar包中,以及对依赖的jar包进行重命名从而达到隔离的作用。第二个功能特性,使得相同依赖不同版本达到共存的目的。)由于maven-shade-plugin插件在解决这个问题上其实是通过对依赖进行重命名而达到隔离的目的,所以配置主要是集中在relocations中。
解决方案: 将模块从项目maven中移除,右键项目-maven-unlink maven projects 新建一个项目专门来做依赖 maven-shade-plugins的其他使用 打入和排除指定jar包。maven-shade-plugins还有个功能就是打入和排除指定的jar包,通过和指定。 官方配置示例 <project> ... <build> <plugins> <plugin> <groupId>org.apache...
maven-shade-plugin介绍 解决问题 1.环境准备 2.解决方案 3.引入依赖 一些需要注意的坑 背景 当我们在maven项目中引入第三方组件时,三方组件中的依赖可能会与项目已有组件发生冲突。 比如三方组件中依赖httpclient的版本是4.5.x,而项目中已有的httpclient版本是3.1.x,那么此时就会产生一下两种情况: ...
要求b-shade使用maven-shade-plugin打包,同时打包的时候规定将com.google.common包名改为zhaohui.com.google.common。 然后在c的pom文件中删除b的依赖,改为依赖b-shade.然后在根目录执行mvn package。 最后,在c的target目录中执行java -jar package-test-c-1.0-SNAPSHOT.jar,输出如下: ...
如果uber-jar 被其他项目依赖,而我们的 uber-jar 又是保留了依赖 jar 的 class 的全类名,那么就可能类重复而导致类加载冲突;比如项目A依赖了我们的maven-shade-plugin-demo,还依赖了 B.jar,两个 jar 中都存在cn.hutool.core.util.StrUtil.class,但 api 完全不一样,根据双亲委派模型,只会成功加载其中某个cn...
之前我写了一个使用jarjar.jar重命名包名来解决maven依赖版本冲突的问题,今天逛V2EX的时候看到有人提到maven-shade-plugin插件,就亲自试了下,发现的确非常方便,因此做下记录。 问题描述 首先说明遇到的问题:项目中已经存在poi 3.17的依赖,而poi-tl最低poi版本4.12,将项目中已有的3.17升级到4.12时,旧代码出错,但是不...