目录
问题
今天有个项目,该项目之前依赖的是mysql-connector-java-5.1.24.jar
的jar包,现在需要升级为mysql-connector-java-8.0.29.jar
,而且,项目中还要保留5.1.24
的版本。
当进行如下配置maven:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
源代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @author zs
* @datetime 2022/8/3 15:49
* @desc
*/
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
包然后引用
<dependency>
<!--自定义(随便填)-->
<groupId>com.apache</groupId>
<!--自定义(随便填,但需确保不重复)-->
<artifactId>poi</artifactId>
<!--自定义(随便填)-->
<version>4.1.2</version>
<!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<scope>system</scope>
<!--项目根目录下的lib文件夹下-->
<systemPath>${basedir}/lib/mysql-connector-java-demo-8.0.29.jar</systemPath>
</dependency>
- 这种方式需要对打包进行配置:
<build>
<!-- 第三方包打包 -->
<resources>
<resource>
<directory>lib</directory>
<targetPath>/BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</resources>
</build>
第2种方式引入依赖
- 执行如下命令把jar包安装到本地仓库:
mvn install:install-file -Dfile=mysql-connector-java-demo-8.0.29.jar -DgroupId=com.apache -DartifactId=mysqldemo -Dversion=8.0.29 -Dpackaging=jar
但这种方式,可能会报出如下错误:
这个错误提示你可能没有安装maven,你需要去安装maven或者正确配置maven。
- 在pom文件中直接引用:
<dependency>
<groupId>com.apache</groupId>
<artifactId>mysqldemo </artifactId>
<version>8.0.29</version>
</dependency>
测试
配置文件
<!--配置8.0.29版本的mysql-connector-java-->
<dependency>
<!--自定义(随便填)-->
<groupId>com.apache</groupId>
<!--自定义(随便填,但需确保不重复)-->
<artifactId>poi</artifactId>
<!--自定义(随便填)-->
<version>4.1.2</version>
<!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<scope>system</scope>
<!--项目根目录下的lib文件夹下-->
<systemPath>${basedir}/lib/mysql-connector-java-demo-8.0.29.jar</systemPath>
</dependency>
<!--配置5.1.24版本的mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
测试代码
/**
* @author zs
* @datetime 2022/8/3 15:49
* @desc
*/
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包同时使用没有出现任何问题,说明这种修改方式是正确的的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99192.html