java - Maven - 无法解决 google-vision beta 和 aws-sdk 子组件之间的依赖冲突

标签 java maven amazon-web-services amazon-dynamodb google-vision

我正在尝试使用 google-vision 从图像(上传到 AWS S3)中获取文本并将其存储在 AWS Dynamo DB 中。我在 jackson-core 上遇到依赖项冲突,因为 google-api 和 aws-java-sdk 使用两个不同的版本。

<小时/>

依赖层次结构

google-api-client: 1.22.0 uses jackson-core: 2.1.3

google-cloud-vision: 0.22.0-beta uses jackson-core: 2.1.3

aws-java-sdk: 1.11.106 uses jackson-core: 2.6.6

我尝试了“排除”并在 pom.xml 中添加了显式依赖项以使用 jackson-core: 2.6.6。 Google-vision api 可以很好地适应这一变化。但是,AmazonDynamoDBClientBuilder 失败并出现以下错误:

<小时/>
Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.amazonaws.AmazonWebServiceClient.<init>(Lcom/amazonaws/client/AwsSyncClientParams;)V from class com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder.build(AmazonDynamoDBClientBuilder.java:60)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder.build(AmazonDynamoDBClientBuilder.java:26)
    at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)
    at com.oneglint.ImageProcessing.AddItem.main(AddItem.java:133)

版本冲突时显示以下错误

Exception in thread "main" 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.amazonaws.partitions.PartitionsLoader.<clinit>(PartitionsLoader.java:51)
    at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
    at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:64)
    at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:52)
    at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:105)
    at com.amazonaws.client.builder.AwsClientBuilder.withRegion(AwsClientBuilder.java:239)
    at com.oneglint.ImageProcessing.AddItem.main(AddItem.java:132)
<小时/>

我在这里缺少什么?感谢您的帮助..

顺便说一句,我正在使用 github 中的示例代码来实现此目的。以下是链接:

DynamoDB 示例:https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/java/example_code/dynamodb

Google Vision DetectText 示例:https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/vision/cloud-client/src/main/java/com/example/vision/Detect.java

<小时/>

其他详细信息

如果作为独立项目执行,这两个示例都可以正常工作。仅当 PutItem (AWS) 和 Detect (google-vision) 类合并在一个项目中并进行适当的代码更改时,才会出现此问题。

最佳答案

您的项目中只能有一个版本的 jackson-core。修复版本的最简单方法是使用 <dependencyManagement>设置版本。

您的主要问题是 jackson-core: 2.6.6 与 AmazonDynamoDBClientBuilder 不兼容。通常的策略是尝试从 2.1.3 到 2.6.6 的所有版本,直到其中一个版本有效。如果没有,您可以尝试查找需要相同 Jackson-core-version 的 amazon 和 google jar 版本。无论如何,这种愚蠢而无聊的尝试和错误。

如果您没有找到任何可行的解决方案,您可以尝试使用 maven-shade-plugin 来遮蔽类(我没有尝试过,可能很困难),或者您需要以两种依赖项都不存在的方式更改您的项目必需的。

关于java - Maven - 无法解决 google-vision beta 和 aws-sdk 子组件之间的依赖冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45976281/

相关文章:

node.js - 如何将 AWS SDK 与 Promise 结合使用

amazon-web-services - 如何在 AWS Cloudformation 中使用 create-change-set 创建新堆栈

java - Java 中的对象分组

java - 在 Java 中实例化一个新对象会重置该对象其他实例中的所有数据

java - 如何组织在各个类(class)重复的对象? java

java - Maven 和 Java : The parameters 'mainClass' for goal org. codehaus.mojo :exec-maven-plugin:1. 2.1:java 丢失或无效

java - Spring Boot 应用程序未启动嵌入式 tomcat

android - 在 eclipse 中使用 maven android 原型(prototype)

asp.net-mvc - 使用 smtp gmail 服务器从 Amazon EC2 实例发送电子邮件

java - 在 Java 中通过管道多次(基本上是 2 次)从 stdin 读取相同的数据