首页 > 其他分享 >如何优雅依赖多个版本的jar包

如何优雅依赖多个版本的jar包

时间:2022-11-14 09:58:28浏览次数:40  
标签:easyexcel jar 优雅 maven 版本 poi apache org

以下文章来源于连边 ,作者连边

问题现状

由于是一个迭代比较久的项目,项目中已经存在poi-tl 1.5.x的依赖,poi-tl v1.5.x是构建在Apache poi3.16上的版本,而我们现在要使用到easyexcel来处理导出,而easyexcel最低的Apache poi版本要求是4.1.2,将项目中已有poi的3.16升级到4.12时,旧代码出错,但是不升级就无法使用easyexcel。

解决思路

解决问题思路无非就是两种:

  1. 将项目中已有的poi3.16升级到4.12,解决升级后代码出错的地方;

    优点:jar包依赖清晰,在代码改动量可控的情况下,推荐使用该方式;

    缺点:代码改动量大,工作量大,而且容易对之前的功能带来不稳定因素;

  2. 使用maven-shade-plugin插件来解决,让项目依赖多个版本的poi版本;

    优点:对原来的功能无影响,代码改动量小;

    缺点:jar依赖变大,因为依赖了同一个依赖的2个版本;jar包依赖不那么清晰优雅;

今天文章主角就是第2种方式。

它的核心思路就是把easyexcel中的高版本poi包改个名字,同时easyexcel中引用的地方也改名(自动),并且代码中用高本版的地方也改个名(手动)。

解决问题

  1. 创建一个空maven项目,项目名称为jarjar,引入easyexcel的依赖;

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>3.1.1</version>
    </dependency>

              查看其依赖的poi版本

     

     

            easyexcel poi版本
  2. 引入插件并且配置好修改的方式;

    <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>true</createDependencyReducedPom>
                            <relocations>
                                <relocation>
                                    <!-- <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>true</createDependencyReducedPom>
                                <relocations>
                                    <relocation>
                                        <!-- 改名前 -->
                                        <pattern>org.apache.poi</pattern>
                                        <!-- 改名后 -->
                                        <shadedPattern>shaded.org.apache.poi</shadedPattern>
                                    </relocation>

                                    <!-- 可以配置多个 -->
                                    <relocation>
                                        <!-- 改名前 -->
                                        <pattern>com.deepoove.poi.XWPFTemplate</pattern>
                                        <!-- 改名后 -->
                                        <shadedPattern>shaded.com.deepoove.poi.XWPFTemplate</shadedPattern>
                                    </relocation>
                                </relocations>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>改名前 -->
                                    <pattern>org.apache.poi</pattern>
                                    <!-- 改名后 -->
                                    <shadedPattern>shaded.org.apache.poi</shadedPattern>
                                </relocation>
                            </relocations>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    较为完整的pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>org.example</groupId>
        <artifactId>jarjar</artifactId>
        <version>1.0-SNAPSHOT</version>

        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>3.1.1</version>
            </dependency>
        </dependencies>

        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>

        <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>true</createDependencyReducedPom>
                                <relocations>
                                    <relocation>
                                        <!-- 改名前 -->
                                        <pattern>org.apache.poi</pattern>
                                        <!-- 改名后 -->
                                        <shadedPattern>shaded.org.apache.poi</shadedPattern>
                                    </relocation>

                                    <!-- 可以配置多个 -->
                                    <relocation>
                                        <!-- 改名前 -->
                                        <pattern>com.deepoove.poi.XWPFTemplate</pattern>
                                        <!-- 改名后 -->
                                        <shadedPattern>shaded.com.deepoove.poi.XWPFTemplate</shadedPattern>
                                    </relocation>
                                </relocations>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>

    </project>
  3. 打出jar包;

    执行mvn package,如果是IDEA直接双击Lifecycle中的package就行了。

     

     

    打出jar包

    这时target目录中会有两个包,一个是original开头的原本包,因为我们没有新建类,所以这个包是空的。另一个是和artifactId-version.jar的包,artifactIdversion是本项目创建时填写的坐标。

    如图,我的这个maven项目叫jarjar,版本是1.0:

     

     

    找到指定的jar包
  4. 依赖本地jar,运行项目;

    <dependency>
                <groupId>org.example</groupId>
                <artifactId>jarjar</artifactId>
                <version>1.0-SNAPSHOT</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/src/main/java/lib/jarjar-1.0-SNAPSHOT.jar</systemPath>
    </dependency>
     <build>
       <resources>
        <resource>
          <directory>lib</directory>
          <targetPath>/BOOT-INF/lib/</targetPath>
          <includes>
            <include>**/*.jar</include>
          </includes>
        </resource>
       </resources>
     </build>
    1. 处理打包
    2. 自定义目录,这里在project的根目录新建lib文件夹,将jar放进去

    3. 引入jar包

       

       

      jarjar项目的pom信息

至此,已经无损的引入了easyexcel依赖,easyexcel中引用的地方也改名(自动),并且代码中用高本版的地方也改个名(手动)。

   

标签:easyexcel,jar,优雅,maven,版本,poi,apache,org
From: https://www.cnblogs.com/cmy-94/p/16888062.html

相关文章

  • Nacos 版本不一致报错: Request nacos server failed
    在做微服务开发中,测试环境使用Nacos没有问题,但是生产环境服务启动一直报错:com.alibaba.nacos.api.exception.NacosException:Requestnacosserverfailed: atcom.ali......
  • 如何设置JavaScript的版本为6
    如何设置JavaScript的版本为6设置里面搜索JavaScript,语言和框架——>JavaScript 使用JavaScript6的好处例如:for循环中可以使用let而不用var//这里出现let是因为Jav......
  • Jmeter使用指定的jdk版本运行
    1、将jmeter.bat文件改为jmeter.txt文件,打开后找到图示处的内容2、添加jdk路径3、将jmeter.txt文件改回jmeter.bat即可......
  • Java安全之Mojarra JSF反序列化
    Java安全之MojarraJSF反序列化AboutJSFJavaServerFaces,新一代的JavaWeb应用技术标准,吸收了很多JavaServlet以及其他的Web应用框架的特性。JSF为Web应用开发定义了一......
  • idea运行是不支持发行版本5
    输入快捷键ctrl+alt+shift+s打开界面点击apply最终即可成功运行......
  • idea将java项目打成jar包并使用
    1.首先编写一个工具类2.进行打包操作)3.Build之后在项目的out包下面就出现了一个jar包在新建一个项目新建lib文件夹将jar包放进去4.最后即可调用......
  • 全网Tengine最新版本部署及原理(最详细安装过程,坑全部排除,一次成功)
    简单比较一下Tengine和Nginx背景使用最新的软件,可以处理一些bug,文章对CentOS6不做介绍(不会用)推荐使用Tengine,理由是淘宝再用,兼容Nginx可以随时切换Tengine-2.3.0+......
  • SAP版本升级,企业需要考虑评估哪些问题?
    SAP自1972年推出ERP产品以来,已经经历了几次产品换代,每代产品版本也在不断的更新。企业也需要根据自己的战略选择主动或被动的SAP版本升级。2015年SAP推出了他们的最新一代ER......
  • 一次SpringBoot版本升级,引发的血案
    前言最近项目组升级了SpringBoot版本,由之前的2.0.4升级到最新版本2.7.5,却引出了一个大Bug。到底是怎么回事呢?1.案发现场有一天,项目组的同事反馈给我说,我之前有个接口在......
  • Mysql InnoDB多版本并发控制MVCC
    参考书籍《mysql是怎样运行的》系列文章目录和关于我一丶为什么需要事务隔离级别mysql是一个客户端/服务断软件,对于同一个服务器来说,可以有多个客户端进行连接,每一个客......