gradle - Google API客户端链接了错误版本的jackson-core

标签 gradle google-cloud-endpoints google-api-client

我包括最新版本的Google API客户端(用于与AppEngine端点进行交互)。

组装时出现此崩溃:

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':backend:endpointsDiscoveryDocs'.
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
  at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
  at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
  at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
  at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
  at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
  at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
  at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
  at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
  at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
  at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
  at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
  at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
  at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
  at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
  at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
  at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
  at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
  at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z
  at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:537)
  at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:448)
  at com.google.api.server.spi.ObjectMapperUtil.createStandardObjectMapper(ObjectMapperUtil.java:75)
  at com.google.api.server.spi.ObjectMapperUtil.createStandardObjectMapper(ObjectMapperUtil.java:62)
  at com.google.api.server.spi.tools.GenClientLibAction.<clinit>(GenClientLibAction.java:37)
  at com.google.api.server.spi.tools.EndpointsTool.<init>(EndpointsTool.java:55)
  at com.google.cloud.tools.gradle.endpoints.framework.server.task.GenerateDiscoveryDocsTask.generateDiscoveryDocs(GenerateDiscoveryDocsTask.java:122)
  at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
  at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
  at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
  at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
  at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:731)
  at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:705)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
  at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
  at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
  ... 27 more

我检查了我的依赖关系:
+--- com.google.apis:google-api-services-oauth2:v1-rev129-1.22.0
|    \--- com.google.api-client:google-api-client:1.22.0
|         +--- com.google.oauth-client:google-oauth-client:1.22.0
|         |    +--- com.google.http-client:google-http-client:1.22.0
|         |    |    \--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.1
|         |    \--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.1
|         +--- com.google.http-client:google-http-client-jackson2:1.22.0
|         |    +--- com.google.http-client:google-http-client:1.22.0 (*)
|         |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3
|         \--- com.google.guava:guava-jdk5:17.0

如您所见,包含的jackson-core的版本是2.1.3

但是,函数com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z的第一个声明出现在版本2.3中:

http://grepcode.com/file/repo1.maven.org/maven2/com.fasterxml.jackson.core/jackson-core/2.3.0/com/fasterxml/jackson/core/JsonFactory.java/

Google库是否链接了错误的jackson-core版本?

如果相关,在将我的v1 Google Cloud Endpoints代码迁移到v2的过程中,这会开始发生。

更新1

当我从Google API客户端删除依赖项或强制升级依赖项时,会发生相同的错误。

升级时的依赖关系树示例:
+--- com.google.apis:google-api-services-oauth2:v1-rev129-1.22.0
|    \--- com.google.api-client:google-api-client:1.22.0
|         +--- com.google.oauth-client:google-oauth-client:1.22.0
|         |    +--- com.google.http-client:google-http-client:1.22.0
|         |    |    \--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.1
|         |    \--- com.google.code.findbugs:jsr305:1.3.9 -> 3.0.1
|         +--- com.google.http-client:google-http-client-jackson2:1.22.0
|         |    +--- com.google.http-client:google-http-client:1.22.0 (*)
|         |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3 -> 2.6.0
|         \--- com.google.guava:guava-jdk5:17.0

我用来升级依赖项的Gradle片段:
configurations {
    all {
        resolutionStrategy {
            force 'com.fasterxml.jackson.core:jackson-core:2.6.0'
            force 'com.fasterxml.jackson.databind:jackson-databind:2.6.0'
        }
    }
}

我用来删除依赖项的Gradle片段:
compile "com.google.apis:google-api-services-oauth2:v1-rev129-1.22.0", {
    exclude group: "com.fasterxml.jackson.core", module: "jackson-core"
}

更新2

似乎可能还有其他问题。同步时出现以下错误:
14:13:27.882 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.google.api.server.spi.tools.GenClientLibAction
14:13:27.882 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at com.google.api.server.spi.tools.EndpointsTool.<init>(EndpointsTool.java:55)
14:13:27.882 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at com.google.cloud.tools.gradle.endpoints.framework.server.task.GenerateDiscoveryDocsTask.generateDiscoveryDocs(GenerateDiscoveryDocsTask.java:122)
14:13:27.882 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]   at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)

失败的同步可能会使构建每次都失败。

最佳答案

Endpoints框架需要比客户端库更新的Jackson版本。如果在同一库中有一个客户端库和Endpoint框架,则应从客户端库中排除Jackson依赖项。

关于gradle - Google API客户端链接了错误版本的jackson-core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46155618/

相关文章:

bash - 如何在gradle构建脚本中添加bash和shell脚本目录路径?

gradle - 如何在不丢失内容的情况下使用groovy编辑vsixmanifest?

python - 带有谷歌身份工具包的谷歌云端点

android - 使用适用于 Android 和 ADT 的 Google Cloud Endpoints

android - 运行时位置权限 - GoogleApiClient 尚未连接

google-api - 故障排除 : Google Calendar Insert API error "Insufficient Permission: Request had insufficient authentication scopes"

java - Gradle 不提供子项目中的依赖项

gradle - 我在gradle中遇到了这个错误,而且我似乎不明白发生了什么。我的gradle文件打印在下面

google-app-engine - 谷歌应用引擎 : Endpoints authentication with ID and password

ios - Google 表格 API 发布 404 错误