首页 > 其他分享 >maven如何配置统一依赖多版本共存?

maven如何配置统一依赖多版本共存?

时间:2022-09-02 21:11:29浏览次数:84  
标签:4.1 共存 jar hutool maven 版本 poi apache

本来可以通过在groupId后面加点来共存jar包的多版本,就像这样

<dependency>

    <groupId>cn.hutool</groupId>

    <artifactId>hutool-core</artifactId>

</dependency>

<!--添加同一依赖的不同版本:groupId后加.-->

<dependency>

    <groupId>cn.hutool.</groupId>

    <artifactId>hutool-core</artifactId>

    <version>4.1.12</version>

</dependency>

<!--添加同一依赖的不同版本:groupId后加..-->

<dependency>

    <groupId>cn.hutool..</groupId>

    <artifactId>hutool-core</artifactId>

    <version>4.5.1</version>

</dependency>

但是这个不符合我的需求,我的问题:

项目本身使用了 Apache poi 3.17 作为excel导出的依赖(既存功能),后来又引入了word生成工具poi-tl 1.10.0版本,使用的poi是4.1.2,导致依赖冲突。

具体体现是编译无问题,运行时poi-tl出现ClassNotFoundException异常(因为实际使用的是3.17)。

首先想到的是排包,使用高版本依赖,但是经测试发现使用4.1.2时原本的excel功能有问题,使用3.17的时候word功能有问题,即poi 3.17、4.1.2都需要!

解决方案

使用jarjar对依赖4.1.2的jar包修改包名,同时poi-tl也以相同方式修改包名。

首先是jarjar工具的下载,点击下载即可,jarjar.rar

使用方式

把下载的​​jarjar-1.4.jar​​包放在电脑里的一个英文目录下,同时把要修改的​​poi-4.1.2.jar​​也放在相同目录。

新建rule.txt,写上​​rule org.apache.poi.** com.apache.poi.@1​​,这个是改命规则,即把​​org.apache.poi.**​​的全改成​​com.apache.poi.**​​,其中的​​@1​​代表匹配第一个​​*​​或者​​**​​,如果后面还有,就使用@2、@3……

我的压缩文件里已经有rule.txt,可以参照着修改

可以先执行命令​​java -jar jarjar-1.4.jar strings poi-4.1.2.jar​​查看是否可以正确读取包名。

然后执行​​java -jar jarjar-1.4.jar process rule.txt poi-4.1.2.jar poi-4.1.2-new.jar​​,代表以​​rule.txt​​的规则修改​​poi-4.1.2.jar​​,生成的文件名为​​poi-4.1.2-new.jar​​,新文件名随意。

后面的问题就好解决了,使用这个jar包分别对​​poi-4.1.2.jar​​、​​poi-tl-1.10.0.jar​​、​​poi-ooxml-4.1.2.jar​​、​​poi-ooxml-schemas-4.1.2.jar​​执行上面第二个命令,最后把新打的jar包作为第三方依赖添加到项目里面。

实际最后运行的时候仍然会出现找不到类的情况,不过肯定不是poi里面的类了,这时只需要把缺少的jar包引入进来就行。

顺便附一个maven项目中引入第三方依赖的方式,以及让其打包的配置方式:

首先在src的同级目录创建一个lib的文件夹,放入jar包

 

 

然后引用这两个jar包

<dependency>
            <groupId>com.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
            <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
            <scope>system</scope>
            <!--项目根目录下的lib文件夹下-->
            <systemPath>${basedir}/lib/poi-4.1.2-new.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>com.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
            <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
            <scope>system</scope>
            <!--项目根目录下的lib文件夹下-->
            <systemPath>${basedir}/lib/poi-scratchpad-4.1.2-new.jar</systemPath>
        </dependency>

同时注意打包的地方也要改下,主要就是框里的内容

 

 

<build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>lib</directory>
                <targetPath>/BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
        </resources>
        <finalName>${project.name}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
            <plugin>
                <!--主要使用的是maven提供的assembly插件完成-->
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <descriptors>
                        <!--具体的配置文件-->
                        <descriptor>src/main/assembly/package.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <!--绑定到maven操作类型上-->
                        <phase>package</phase>
                        <!--运行一次-->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <defaultGoal>compile</defaultGoal>
    </build>

最后,在使用到poi4.1.2,poi-scratchpad-4.1.2的地方引入新的包的路径即可。

 

 maven如何配置统一依赖多版本共存就介绍到这儿。

 

标签:4.1,共存,jar,hutool,maven,版本,poi,apache
From: https://www.cnblogs.com/shamo89/p/16651240.html

相关文章

  • maven打包报错:Cannot find matching toolchain definitions for the following toolch
      报错信息: [ERROR]Failedtoexecutegoalorg.apache.maven.plugins:maven-toolchains-plugin:1.1:toolchain(default)onprojectmyfile:Cannotfindmatchi......
  • <dependencyManagement>正确使用方法 多个子项目都引用同一样依赖,则可以避免在每个使用
    <dependencyManagement>正确使用方法dependencyManagement正确使用方法一、介绍Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyMan......
  • Docker 部署GitLabs 版本升级 13.9.x -> 15.3.x
    Gitlabs版本升级大版本不能直接跳级升级,可以参考官方的升级路径。本人是从13.9.x需要升级到最新的15.3.x。参考官方路径结合自己的实际情况成功升级。13.9.0->13.12.......
  • Apache Maven ToolChains的使用
    ApacheMavenToolChains的使用  简介Toolchains的介绍Toolchains的例子Toolchains支持总结简介Maven是java中非常有用和常用的构建工具,基本上现在大型的java项目都是M......
  • Mysql压缩包版本安装
    之前一直使用的是安装包,今天懒得去下载了,直接用压缩包安装,记录一下。1、先去官网下载压缩包。https://dev.mysql.com/downloads/mysql/8.0.html2、将文件夹解压在要安装......
  • maven scope的汇总
    1、自建starter的一些关于maven的记录。可以减小jar包的大小,不做依赖传递<dependency><groupId>org.springframework.boot</groupId><artifactId>sprin......
  • JDK&Maven安装配置
     【JDK安装配置】 1.下载JDK:国内下载地址(华为镜像):https://repo.huaweicloud.com/java/jdk/ 根据电脑系统选择对应的包,windows现在一般是windows_x64. .exe......
  • Java开发学习(二十九)----Maven依赖传递、可选依赖、排除依赖解析
    现在的项目一般是拆分成一个个独立的模块,当在其他项目中想要使用独立出来的这些模块,只需要在其pom.xml使用<dependency>标签来进行jar包的引入即可。<dependency>其实就是......
  • 查看GPU支持的CUDA版本
    针对的是英伟达GPU。操作步骤如下:打开NVIDIAControlPanel(NVIDIA控制面板)可以在搜索里直接搜索,如下图所示:在打开的控制面板中点击“帮助”,如下图所示:点击“系统信息......
  • Maven 操作手册
    Maven操作手册1.基础命令释义说明命令打包跳过测试mvncleaninstall-DskipTests打包跳过测试mvncleanpackage-Dmaven.test.skip=true删除.last......