问题描述
我正在使用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")
- shadow插件将其从生成的JAR中删除,这意味着运行时错误为:
-
java.lang.classNotFoundException: org.apache.hadoop.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插件会被正式告知实际上需要驱动程序的事实。