当前位置: 首页 > 知识库问答 >
问题:

Maven-无法解决依赖冲突B/W,google-vision beta和aws-sdk子组件

万德海
2023-03-14

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

依赖层次结构

google-api-client:1.22.0使用Jackson-core:2.1.3

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

共有1个答案

羿昊英
2023-03-14

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

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

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

 类似资料:
  • 由一些模块组成的maven项目。我的一个模块正在使用google版本的guava依赖项。现在,我正在我的项目中集成另一个模块,该模块也使用guava但版本。 因此,我希望新模块使用guava版本,而其余项目使用guava版本。我尝试将guava的添加到新模块中,但没有成功。 更新:@Guillaume Darmont的答案为不同的模块解决了问题。但现在我的问题是,新模块有两个依赖项,其中一个使用g

  • 我有一个相当大的遗留项目,我正在添加一个组件。此组件使用HtmlUnit。我可以用Maven编译它,但是当我运行它时,我得到: 所以它缺少正确的构造函数。我认为这几乎肯定是中的版本冲突,但我不确定如何解决它。下面是我的(请注意我一直尝试玩的排除和依赖关系管理的所有游戏): 有什么想法吗? 编辑:有人认为这个问题是这个问题的重复,但事实并非如此,因为本例中的依赖类型不是。

  • TL;DR两个gradle插件使用相同依赖项的不同版本,在调用其中一个插件时会导致编译错误。 > 我有一个使用Gradle4编译的Java项目。十、 该项目依赖于两个插件:gradle-jaxb-plugin和serenity-gradle-plugin。 两个插件共享一个依赖项,guice。 我需要升级一个插件(serenety)。升级会导致调用jaxb插件时发生冲突。 我做了一些调查和谷歌搜索

  • 我在使用commons-codec库时遇到(NoSuchMethodError)问题,这里有我的POM:`http://maven.apache.org/xsd/maven-4.0.0.xsd“>4.0.0 我使用了exclusions和dependencyManagement,但结果是相同的 有人能告诉我更好的解决这个问题的方法吗?

  • 问题内容: 假设我有四个项目: 项目A(依赖于B和D) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下,如果我运行项目A,则Maven将正确地解决对D的依赖关系。如果我理解正确,则Maven始终以最短的路径获取依赖关系。由于D是A的直接依赖项,因此将使用B内指定的D而不是D。 但是现在假设这种结构: 项目A(依赖于B和C) 项目B(依赖于D) 项目C(依赖于D) 项目D 在这种情况下

  • 我有一个具有以下依赖项的GWT项目 > Gin 2.1.2依赖于guice 3.0,而owlapi 4.0.2依赖于guice 4.0-beta。 gin在客户端使用,而owlapi在服务器端使用。 我有什么办法才能让这件事成功?我是否可以在保留正常运行的GWT devmode的同时使用依赖关系范围?