maven-shade-plugin主要用于创建uber-jar(也称为fat-jar或assembly jar),即将项目的所有依赖项(包括传递依赖项)打包到一个单独的JAR文件中。此外,它还可以重命名包、排除类、优化JAR等,以解决类路径冲突和减少JAR文件大小。 2. 分析项目中jar冲突的原因 JAR冲突通常发生在以下情况: 不同的依赖项包含相同类的不同...
pom.xml中添加maven-shade-plugin组件(作用是将依赖的包在package阶段一起打入jar包中,以及对依赖的jar包进行重命名从而达到隔离的作用。第二个功能特性,使得相同依赖不同版本达到共存的目的。)由于maven-shade-plugin插件在解决这个问题上其实是通过对依赖进行重命名而达到隔离的目的,所以配置主要是集中在relocations中。
Maven Shade Plugin是Maven的一个插件,它可以将所有依赖项打包到一个JAR文件中,创建一个“fat” JAR(也称为“uber” JAR),使得应用程序可以作为一个独立的可执行JAR运行。这个插件的主要用途是解决大型项目中的依赖冲突和类冲突问题。在使用Maven Shade Plugin时,我们可以通过设置MainClass来创建一个可以执行的JAR包...
增加一个run/debug configuration 最后点击debug按钮就可以调试了。具体生成jar包的代码org.apache.maven.plugins.shade.DefaultShader line151 shadeJars方法。 打断点发现,打包的时候,解析pom文件总共获取了4个jar包,其中guava只有19.0,没有26.0.jre,所以执行的时候才会报错找不到26.0.jre中的方法。(maven选择时只能允...
如果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时,旧代码出错,但是不...
简单来说就是将依赖的包在package阶段一起打入jar包中,以及对依赖的jar包进行重命名从而达到隔离的作用。这里为了解决上面的问题我们主要使用第二个功能特性,使得相同依赖不同版本达到共存的目的。 解决问题 1.环境准备 这里用fastjson来模拟使用maven-shade-plugin解决项目中不同版本共存问题。原项目此时使用的是1.1.15...
maven shade plugin 能够把项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 jar 包中,在打包的时候它有一个非常重要的特性是支持 relocation。relocation 的意思是把类重命名,比如把 com.caucho.hessian.io.HessianInput 重命名为 hidden.com.caucho.hessian.io.HessianInput,这样就不会出现冲突了。
在maven工程中,我们常常遇到底层依赖包的版本冲突问题。如果高版本对低版本兼容,那么我们可以使用maven的exclusions排除掉低版本。但如果版本互不兼容,甚至是不同jar有相同类名的冲突,就比较棘手了。 比如,我在某个java工程中即使用了Hutool的加密工具类,也使用了openfeign的feign接口。而Hutool依赖了bcprov-jdk15to18...
现在基本上都是采用maven来进行开发管理,我有一个需求是需要把通过maven管理的java工程打成可执行的jar包,这样也就是说必需把工程依赖的jar包也一起打包。而使用maven默认的package命令构建的jar包中只包括了工程自身的class文件,并没有包括依赖的jar包。我们可以通过配置插件来对工程进行打包,pom具体配置如下: ...