Gradle shadowJar删除所需的SQL驱动程序

问题描述

我正在使用ow to resolve Multi Factor authentication for AAD in Selenium test in CI Gradle插件提供的shadowJar Gradle目标来构建应用程序,该应用程序需要org.apache.hive.jdbc.HiveDriver才能使用Impala连接到Kudu。

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

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

我的build.gradle包含:

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

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

解决方法

我发现解决方案是不通过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 =>
       ...
  }
}

通过这种方式,shadow插件会被正式告知实际上需要驱动程序的事实。