当我尝试使用gradle构建fat jar文件时遇到了一个问题。是否有办法配置gradle以支持JAR文件中的多个JDBC驱动程序?我在我的META-INF/services/java.sqlDriver
中注意到,它将采用任何JDBC库。因此,当运行jar文件时,我经常会看到此错误。
java.sql.SQLException: No suitable driver
at java.sql/java.sql.DriverManager.getDriver(DriverManager.java:299)
我发现这个问题的解决方案是在初始化数据库连接之前添加Class.forName('jdbcDriver')
,但我发现对于JTDS库,您不再需要它,因为JDBC type 4可以根据连接字符串自动检测您需要哪个驱动程序。
我的build.gradle文件
plugins {
id("application")
id("com.github.johnrengelman.shadow") version "7.1.0"
}
dependencies {
implementation group: 'net.sourceforge.jtds', name: 'jtds', version: '1.3.1'
implementation group: 'mysql', name: 'mysql-connector-java', version: '8.0.26'
}
我的连接字符串jdbc:jtds:sqlserver://localhost:1111/db;user=TEST;password=DUMMY
我使用的是Java 17和Gradle 7.3.3
1条答案
按热度按时间lqfhib0f1#
您需要配置Gradle Shadow插件以合并提供程序配置文件。此处介绍了如何执行此操作:
合并服务描述符文件
Java库通常在JAR的
META-INF/services
目录中包含服务描述符文件。服务描述符通常包含特定 * service * 支持的类的行分隔列表。在运行时,将读取此文件并将其用于配置库或应用程序行为。多个依赖项可能使用同一个服务描述符文件名,这种情况下,通常希望将文件的每个示例的内容合并到一个输出文件中,
ServiceFileTransformer
类用于执行这种合并,默认情况下,它会将META-INF/services
下的每个文件副本合并到输出JAR中的一个文件中。上面的代码片段是调用
transform(ServiceFileTransformer.class)
的方便语法如果使用Kotlin DSL,则如下所示:
或者: