首页 > 解决方案 > Gradle shadowJar 删除所需的 SQL 驱动程序

问题描述

我正在使用com.github.johnrengelman.shadowshadowJar Gradle 插件提供的 Gradle 目标来构建应用程序,这需要使用 Impala 连接到 Kudu。org.apache.hive.jdbc.HiveDriver

问题是当我使用标准方法在 Scala 中导入驱动程序时:

Class.forName("org.apache.hive.jdbc.HiveDriver")

我的build.gradle包含:

dependencies {
  implementation {
    "org.apache.hive:hive-jdbc:1.2.1"
  }
}

如何指示影子插件不要删除通过字符串注入的所需依赖项?

标签: gradlehivefatjar

解决方案


我发现解决方案是不包含静态类型 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 =>
       ...
  }
}

这样,影子插件就会被正式告知实际上需要驱动程序这一事实。


推荐阅读