java.lang.NoSuchMethodError: com.amazonaws.protocol.json.JsonErrorShapeMetadata.withExceptionUnmarshaller

java.lang.NoSuchMethodError: com.amazonaws.protocol.json.JsonErrorShapeMetadata.withExceptionUnmarshaller

正在尝试调用 AWS 机密管理器 api 以获取机密。但是在部署 jar 时出现此错误。我已确保依赖项包含在 jar 中。

POM:

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.11.647</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
        <version>1.11.647</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-secretsmanager</artifactId>
        <version>1.11.647</version>
    </dependency>

代码片段

      val client: AWSSecretsManager = AWSSecretsManagerClientBuilder
                            .standard()
                            .withRegion(region)
                            .build()

错误:

    at com.amazonaws.services.secretsmanager.AWSSecretsManagerClient.<clinit>(AWSSecretsManagerClient.java:148)
    at com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder.build(AWSSecretsManagerClientBuilder.java:61)
    at com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder.build(AWSSecretsManagerClientBuilder.java:27)
    at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)```
...

withExceptionUnmarshaller() 自版本 1.11.622 以来已在 com.amazonaws.protocol.json.JsonErrorShapeMetadata 中引入:

https://github.com/aws/aws-sdk-java/commit/c6bb2c8709aaff68ed732d9232630f4c40b07fcd#diff-536c803a93cb58597c2e0bfe71e2815d

你的 pom.xml 似乎是正确的。

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
        <version>1.11.647</version>
    </dependency>

因此当 运行.

时,您的程序可能会引用 aws-java-sdk-core.jar 的另一个旧版本

我已经浪费了很多时间来通过那个错误,但仍然不能。最后我使用了另一个 sdk。 我没有使用 aws-java-sdk-core 中的 com.amazonaws,而是使用了 software.amazon.awssdk 成功了-

  <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>secretsmanager</artifactId>
        <version>2.14.7</version>
    </dependency>

并使用此处记录的代码 - GetSecretValue