Google Ads API Java Client Library: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull
Google Ads API Java Client Library: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull
尝试使用 Google Ads API Java Client Library 访问 Adwords API(代码片段取自项目自述文件):
val credential = new OfflineCredentials.Builder()
.forApi(OfflineCredentials.Api.ADWORDS)
.withClientSecrets(clientId, clientSecret)
.withRefreshToken(refreshToken)
.build()
.generateCredential()
失败并出现错误:
[info] Exception encountered when attempting to run a suite with class name: AdwordsClientSpec *** ABORTED ***
[info] java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
[info] at com.google.api.ads.common.lib.auth.OfflineCredentials$Api.<init>(OfflineCredentials.java:89)
[info] at com.google.api.ads.common.lib.auth.OfflineCredentials$Api.<clinit>(OfflineCredentials.java:81)
[info] at AdwordsClient$.generateAdwordsCredential(AdwordsClient.scala:24)
[info] at AdwordsClientSpec$$anonfun.apply$mcV$sp(AdwordsClientSpec.scala:23)
[info] at AdwordsClientSpec$$anonfun.apply(AdwordsClientSpec.scala:18)
[info] at AdwordsClientSpec$$anonfun.apply(AdwordsClientSpec.scala:18)
[info] at org.scalatest.Transformer$$anonfun$apply.apply$mcV$sp(Transformer.scala:22)
[info] at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)
[info] at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
[info] at org.scalatest.Transformer.apply(Transformer.scala:22)
似乎有些依赖项没有正确解析。我将 README 中提到的两个人工制品的最新版本与 sbt:
一起使用
"com.google.api-ads" % "ads-lib" % "3.5.0",
"com.google.api-ads" % "adwords-axis" % "3.5.0"
正如@TzachZoha 所指出的,存在与 Guava 的版本冲突。 com.google.api-ads
使用 Guava 16.0 而不是 Guava 20.0。我能够通过更改 sbt 构建定义来编译我的代码:
("com.google.api-ads" % "ads-lib" % "3.5.0").exclude(
"com.google.guava", "guava"),
"com.google.api-ads" % "adwords-axis" % "3.5.0",
"com.google.guava" % "guava" % "20.0"
我可以通过从我的 lib 文件夹中删除 Google Collections jar 来解决这个问题,它与其他一些 jar 一起出现;见 https://code.google.com/archive/p/google-collections/#
尝试使用 Google Ads API Java Client Library 访问 Adwords API(代码片段取自项目自述文件):
val credential = new OfflineCredentials.Builder()
.forApi(OfflineCredentials.Api.ADWORDS)
.withClientSecrets(clientId, clientSecret)
.withRefreshToken(refreshToken)
.build()
.generateCredential()
失败并出现错误:
[info] Exception encountered when attempting to run a suite with class name: AdwordsClientSpec *** ABORTED ***
[info] java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkNotNull(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
[info] at com.google.api.ads.common.lib.auth.OfflineCredentials$Api.<init>(OfflineCredentials.java:89)
[info] at com.google.api.ads.common.lib.auth.OfflineCredentials$Api.<clinit>(OfflineCredentials.java:81)
[info] at AdwordsClient$.generateAdwordsCredential(AdwordsClient.scala:24)
[info] at AdwordsClientSpec$$anonfun.apply$mcV$sp(AdwordsClientSpec.scala:23)
[info] at AdwordsClientSpec$$anonfun.apply(AdwordsClientSpec.scala:18)
[info] at AdwordsClientSpec$$anonfun.apply(AdwordsClientSpec.scala:18)
[info] at org.scalatest.Transformer$$anonfun$apply.apply$mcV$sp(Transformer.scala:22)
[info] at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)
[info] at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
[info] at org.scalatest.Transformer.apply(Transformer.scala:22)
似乎有些依赖项没有正确解析。我将 README 中提到的两个人工制品的最新版本与 sbt:
一起使用 "com.google.api-ads" % "ads-lib" % "3.5.0",
"com.google.api-ads" % "adwords-axis" % "3.5.0"
正如@TzachZoha 所指出的,存在与 Guava 的版本冲突。 com.google.api-ads
使用 Guava 16.0 而不是 Guava 20.0。我能够通过更改 sbt 构建定义来编译我的代码:
("com.google.api-ads" % "ads-lib" % "3.5.0").exclude(
"com.google.guava", "guava"),
"com.google.api-ads" % "adwords-axis" % "3.5.0",
"com.google.guava" % "guava" % "20.0"
我可以通过从我的 lib 文件夹中删除 Google Collections jar 来解决这个问题,它与其他一些 jar 一起出现;见 https://code.google.com/archive/p/google-collections/#