将java连接到Google Big Query时,我在java.lang.NoClassDefFoundError "main"线程中得到异常:com/google/api/client/json/



我有一个Java程序,我想用它来运行针对google大查询的查询。

启动程序时出现此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/api/client/json/JsonFactory
at com.simba.googlebigquery.googlebigquery.core.BQConnection.connect(Unknown Source)
at com.simba.googlebigquery.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source)
at com.simba.googlebigquery.jdbc.common.AbstractDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
at missioncontrol.main(missioncontrol.java:60)
Caused by: java.lang.ClassNotFoundException: com.google.api.client.json.JsonFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more

我已经下载了Simba gbq jdbc驱动程序。 我已经设置了我的授权。 我的连接字符串如下所示:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=redacted;OAuthType=0;OAuthServiceAcctEmail=;redaacted@redacted.iam.gserviceaccount.com;OAuthPvtKeyPath=/home/redacted/redacted/redacted.p12;

我的类路径最初看起来像这样:/opt/google/GoogleBigQueryJDBC42.jar

但是我添加了一堆jar文件来解决这个问题,所以现在它看起来像这样:

/google-http-client-1.29.0.jar:/opt/google/google-http-client-jackson2-1.28.0.jar:/opt/google/jackson-annotations-2.9.0.jar:/opt/google/jackson-core-2.9.8.jar:/opt/google/jackson-databind-2.9.8.jar:/opt/google/GoogleBigQueryJDBC42.jar

这是我的环境:

$uname -a
Linux ip-172-31-59-210.ec2.internal 4.14.123-111.109.amzn2.x86_64 #1 SMP Mon Jun 10 19:37:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$java -version
openjdk version "1.8.0_222-ea"
OpenJDK Runtime Environment (build 1.8.0_222-ea-b03)
OpenJDK 64-Bit Server VM (build 25.222-b03, mixed mode)

对我错过了什么有什么想法吗?

谢谢 玛丽

该错误可能是因为 JsonFactory.jar 的父类未包含在类路径中。与其在类路径中单独列出每个.jar,不如尝试使用"/opt/google/*"。

最新更新