栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

解决Maven重复依赖问题(同一个jar包,多个版本)maven同一依赖多版本共存 maven处理mysql-connector-java多版本问题 解决无法将“mvn”项识别为xxx jarjar

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决Maven重复依赖问题(同一个jar包,多个版本)maven同一依赖多版本共存 maven处理mysql-connector-java多版本问题 解决无法将“mvn”项识别为xxx jarjar

目录
  • 问题
  • 分析问题
  • 解决方案
    • 下载jarjar-1.4.jar
    • 使用方式
      • 创建lib目录
      • 创建rule.txt
      • 修改jar包名称
        • 校验能否读取包名
        • 修改包名
    • 使用修改后的jar包
      • 第1种方式引入依赖
      • 第2种方式引入依赖
  • 测试
    • 配置文件
    • 测试代码

问题

今天有个项目,该项目之前依赖的是mysql-connector-java-5.1.24.jar的jar包,现在需要升级为mysql-connector-java-8.0.29.jar,而且,项目中还要保留5.1.24的版本。

当进行如下配置maven:


    mysql
    mysql-connector-java
    5.1.24


    mysql
    mysql-connector-java
    8.0.29

源代码如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class Test {
  private static String jdbc = "com.mysql.jdbc.Driver";
  private static String url =
      "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false";
  private static String username = "root";
  private static String password = "123456";

  private static Connection connection = null;

  public static void main(String[] args) {
    try {
      Class.forName(jdbc);
      connection = DriverManager.getConnection(url, username, password);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
}

在测试启动项目时,报出如下错误:

Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

翻译成中文便是:

Loading class com.mysql.jdbc.Driver'.这已被弃用。新的驱动程序类是'com.mysql.cj.jdbc.Driver'。驱动程序通过SPI自动注册,通常不需要手动加载驱动程序类。

分析问题

在mysql-connector-java-8.0.29版本中,已经弃用了com.mysql.jdbc.Driver了,而mysql-connector-java-5.1.24版本支持com.mysql.jdbc.Driver来加载jdbc的驱动。

我们目前的项目中,既要用mysql-connector-java-8.0.29,也要用mysql-connector-java-5.1.24,那怎么处理呢?

解决方案 下载jarjar-1.4.jar

使用jarjar对依赖mysql-connector-java-8.0.29的jar包修改包名。

首先是jarjar工具的下载,因为官网的下载不支持jdk1.8,因而,我们需要到这个网站去下载:https://wwa.lanzoui.com/i77tLuset4f

为了避免这个网站到时无法使用,可以访问的我的微云去下载:https://share.weiyun.com/dMjXFRe8 密码:uhq7u8

使用方式 创建lib目录

我们需要在src的同级目录下,新建一个lib文件夹,如下图所示:

把下载的jarjar-1.4.jar包放在lib目录下,同时把要修改的mysql-connector-java-8.0.29.jar也放在lib目录。

创建rule.txt

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

修改jar包名称 校验能否读取包名

注意:如果在idea编辑器中直接使用如下命令,可能会导致乱码。

因而,cd 进入到lib目录,执行如下命令

java -jar .jarjar-1.4.jar strings .mysql-connector-java-8.0.29.jar

查看是否可以正确读取包名,如下图是可以正确读取的:

修改包名

执行如下命令:

java -jar .jarjar-1.4.jar process .rule.txt .mysql-connector-java-8.0.29.jar mysql-connector-java-demo-8.0.29.jar

rule.txt的规则修改mysql-connector-java-8.0.29.jar,生成的文件名为mysql-connector-java-demo-8.0.29.jar,新文件名随意。

执行完上诉命令之后,可以在lib目录下,看到mysql-connector-java-demo-8.0.29.jar这个jar包,如下图所示:

使用修改后的jar包

把新打的mysql-connector-java-demo-8.0.29.jar包,作为第三方依赖添加到项目里面。

以下是两种方式在maven项目中引入第三方依赖,以及让其打包的配置方式。

第1种方式引入依赖
  1. 在src的同级目录创建一个lib的文件夹,放入mysql-connector-java-demo-8.0.29.jar包然后引用

    
    com.apache
    
    poi
    
    4.1.2
    
    system
    
    ${basedir}/lib/mysql-connector-java-demo-8.0.29.jar

  1. 这种方式需要对打包进行配置:

    
    
        
            lib
            /BOOT-INF/lib/
            
                **
public class Test {
  private static String jdbc = "com.mysql.jdbc.Driver";
  private static String jdbc8 = "com.mysql.cj.jdbc.Driver";

  public static void main(String[] args) {
    try {
      Class aClass = Class.forName(jdbc);
      String name = aClass.getName();
      System.out.println("jdbc5.1.24. ->" + name);

      Class aClass1 = Class.forName(jdbc8);
      String name1 = aClass1.getName();
      System.out.println("jdbc8.0.29 ->" + name1);
      System.out.println("能够正常加载驱动");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
}

效果展示如下图:

两个jar包同时使用没有出现任何问题,说明这种修改方式是正确的的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1036792.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号