最佳解决Maven同一依赖多版本共存问题,重复依赖(同一个jar包,多个版本)-maven-shade-plugin

目录

问题描述:历史功能整改繁琐,新功能需要高版本依赖

解决办法:使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可

Step1.创建空的maven项目

Step2.Pom文件中引入需要修改名称的依赖

Step3.pom文件中添加maven-shade-plugin

Step4.执行mvn package 或 IDEA中双击Lifecycle中的package

Step5.从生成的target目录下找到新的jar包,引入到原项目中

Step6.对使用的方法重新引入时选择新包名的方法


问题描述:历史功能整改繁琐,新功能需要高版本依赖

公司的历史项目在导出功能上引用的是poi-3.12版本,后续再做word模板导出功能时用到了poi-3.15版本,升级完后发现项目的很多导出功能都瘫痪了。用旧版本,新功能无法使用;用新版本,旧功能瘫痪,且整改的工作量比较大。

解决办法:使用maven-shade-plugin,将某个版本的依赖名称进行修改,重新引入即可

整体流程

==》1.创建空的maven项目

==》2.pom文件中添加需要修改名称的依赖

==》3.pom文件中添加maven-shade-plugin

==》4.执行mvn package 或 IDEA中双击Lifecycle中的package

==》5.从生成的target目录下找到新的jar包,引入到原项目中

==》6.对使用的方法重新引入时选择新包名的方法

Step1.创建空的maven项目

(注意不是springboot项目,会自动引入很多不必要的依赖)

Step2.Pom文件中引入需要修改名称的依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.15</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.15</version>
</dependency>

Step3.pom文件中添加maven-shade-plugin

        只需要调整改名前和改名后的包名即可,其他直接CV

<build>
    <finalName>maven-shade</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.4</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <artifactSet>
                <excludes>
                  <exclude>classworlds:classworlds</exclude>
                  <exclude>junit:junit</exclude>
                  <exclude>jmock:*</exclude>
                  <exclude>*:xml-apis</exclude>
                  <exclude>org.apache.maven:lib:tests</exclude>
                  <exclude>log4j:log4j:jar:</exclude>
                </excludes>
              </artifactSet>
              <filters>
                <filter>
                  <artifact>*:*</artifact>
                  <excludes>
                    <exclude>META-INF/*.SF</exclude>
                    <exclude>META-INF/*.DSA</exclude>
                    <exclude>META-INF/*.RSA</exclude>
                  </excludes>
                </filter>
              </filters>
              <createDependencyReducedPom>true</createDependencyReducedPom>
              <relocations>
                <relocation>
                  <!-- 改名前 -->
                  <pattern>org.apache.poi</pattern>
                  <!-- 改名后 -->
                  <shadedPattern>shade.org.apache.poi</shadedPattern>
                </relocation>
              </relocations>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

Step4.执行mvn package 或 IDEA中双击Lifecycle中的package

Step5.从生成的target目录下找到新的jar包,引入到原项目中

Step6.对使用的方法重新引入时选择新包名的方法

        原项目代码不在本地,直接用了参考链接2的图,更清晰地说明

 PS:写这篇文章的时候,发现了一个实现word模板功能的神器,还没有试过,不过看起来很厉害的样子,先留存一下:Poi-tl Documentation (deepoove.com)

方案移植性功能性易用性

Poi-tl

Java跨平台

Word模板引擎,基于Apache POI,提供更友好的API

低代码,准备文档模板和数据即可

Apache POI

Java跨平台

Apache项目,封装了常见的文档操作,也可以操作底层XML结构

文档不全,这里有一个教程:Apache POI Word快速入门

Freemarker

XML跨平台

仅支持文本,很大的局限性

不推荐,XML结构的代码几乎无法维护

OpenOffice

部署OpenOffice,移植性较差

-

需要了解OpenOffice的API

HTML浏览器导出

依赖浏览器的实现,移植性较差

HTML不能很好的兼容Word的格式,样式糟糕

-

Jacob、winlib

Windows平台

-

复杂,完全不推荐使用

本文参考链接:

1.maven-shade-plugin解决Maven同一依赖多版本共存 - Lixin-Link - 博客园 (cnblogs.com)

2.解决项目版本冲突——maven-shade插件使用 - 掘金 (juejin.cn)

3.巧用maven-shade-plugin解决依赖冲突 - 简书 (jianshu.com)

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Maven Shade插件可以将多个jar包合并成一个可执行的jar包,并且可以将合并后的jar包依赖的其他jar包也打包到该jar包中,从而实现系统依赖范围内的可执行jar包。 以下是使用Maven Shade插件生成系统依赖范围的可执行jar包的步骤: 1. 在Maven项目的pom.xml文件中,添加Maven Shade插件的依赖项: ``` <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> </dependency> ``` 2. 在Maven项目的pom.xml文件中,配置Maven Shade插件: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>jar-with-dependencies</shadedClassifierName> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 其中,`createDependencyReducedPom`指定是否创建一个简化的POM文件,`shadedArtifactAttached`指定生成的jar包是否作为附加的构件,`shadedClassifierName`指定生成的jar包的分类器名称。 3. 运行Maven项目的打包命令,生成系统依赖范围内的可执行jar包: ``` mvn package ``` 执行该命令后,Maven Shade插件会自动将项目打包成可执行的jar包,并且将该jar包依赖的其他jar包也打包到该jar包中,从而生成系统依赖范围内的可执行jar包。生成的jar包的名称一般为`<项目名称>-<版本号>-jar-with-dependencies.jar`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值