- 问题
- 分析问题
- 解决方案
- 下载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种方式引入依赖- 在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
- 这种方式需要对打包进行配置:
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包同时使用没有出现任何问题,说明这种修改方式是正确的的。



