gradle - Gradle shadowJar 删除所需的 SQL 驱动程序
问题描述
我正在使用com.github.johnrengelman.shadowshadowJar
Gradle 插件提供的 Gradle 目标来构建应用程序,这需要使用 Impala 连接到 Kudu。org.apache.hive.jdbc.HiveDriver
问题是当我使用标准方法在 Scala 中导入驱动程序时:
Class.forName("org.apache.hive.jdbc.HiveDriver")
- shadow 插件将其从生成的 JAR 中删除,这意味着运行时错误:
java.lang.ClassNotFoundException: org.apache.hadoop.hive.jdbc.HiveDriver
.
我的build.gradle
包含:
dependencies {
implementation {
"org.apache.hive:hive-jdbc:1.2.1"
}
}
如何指示影子插件不要删除通过字符串注入的所需依赖项?
解决方案
我发现解决方案是不包含静态类型 via Class.forName
,而是通过导入来使用代码:
import java.sql.DriverManager
import org.apache.hive.jdbc.{HiveConnection, HiveDriver}
class Foo {
// Register Hive Driver this way to prevent shadowing to cut it off
new HiveDriver()
DriverManager.getConnection(connectionUrl, user, password) match {
case connection: HiveConnection =>
...
}
}
这样,影子插件就会被正式告知实际上需要驱动程序这一事实。
推荐阅读
- python - How to filter part of a function's output
- spring-cloud - 使用 Spring Cloud Contracts 时,为什么生产者要创建合约?
- django - 无法将模型导入 celery tasks.py 文件
- c++ - 使用 std::sort 对自定义类的智能指针进行排序
- python - 如何使用flask web api直播我的音频输入
- makefile - 使 .SECONDEXPANSION 配方执行两次
- python - 预测依据历史数据
- symfony - Symfony 动态修改表单
- bash - 打印unix所有子目录下的所有文件内容
- wpf - 如何为png图像创建边框