joda-time的AWS问题(java.lang.NoSuchMethodError)

时间:2016-04-01 13:59:43

标签: maven amazon-web-services jodatime

我遇到了aws sdk和joda-time的常见问题。即使互联网上存在许多这些问题,我仍然无法解决这个问题......

Exception in thread "main" java.lang.NoSuchMethodError: org.joda.time.format.DateTimeFormatter.withZoneUTC()Lorg/joda/time/format/DateTimeFormatter;
at com.amazonaws.auth.internal.AWS4SignerUtils.<clinit>(AWS4SignerUtils.java:26)
at com.amazonaws.auth.internal.AWS4SignerRequestParams.<init>(AWS4SignerRequestParams.java:85)
at com.amazonaws.auth.AWS4Signer.sign(AWS4Signer.java:168)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:814)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607)
at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376)
at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287)
at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:11132)
at com.amazonaws.services.ec2.AmazonEC2Client.runInstances(AmazonEC2Client.java:10657)
at cloudSteuerung.AmazonWebServices.create(AmazonWebServices.java:33)
at de.bla.ccu.Test.main(Test.java:16)

检查maven的依赖关系树我注意到了几个joda依赖关系。 AWS似乎需要2.8.1版本,因此我在pom文件中明确添加了它,但仍然出现错误。我尝试了几个版本的joda但没有版本似乎正常工作。 谁能帮我?我只是想运行AWS sdk EC2示例......

dependency tree

5 个答案:

答案 0 :(得分:2)

我在使用aws-java-sdk artifactId声明我们的AWS依赖项时遇到了这个问题。例如

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>x.y.z</version>
</dependency>

我们更改为导入aws-java-sdk-bom依赖项as recommended by Amazon,例如

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-bom</artifactId>
    <version>x.y.z</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

然后单独声明我们的组件依赖关系,例如

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
</dependency>

这允许Maven确定aws-sdk的正确joda-time依赖关系并解决了问题。

答案 1 :(得分:1)

显然,这意味着类路径所引用的JAR的版本比您使用的版本(2.8.1)的版本低

我在JBOSS 6.2 EAP上使用AWS开发工具包,并且遇到相同的问题。我发现JBOSS在“模块”文件夹下有自己的JODA,它首先被加载,而忽略了我在lib文件夹中的JODA版本。我在MANIFEST.MF中删除了ORG.JODA条目,这意味着类加载器现在将从库中查找JODA jar。这解决了我的问题。

答案 2 :(得分:0)

如果您的项目具有Weblogic和AWS依赖关系,请确保首先使用JODA time JAR,最后使用Weblogic JAR,以免它从Weblogic JAR中获取joda时间。

答案 3 :(得分:0)

我尝试了以下操作:-

1)将我的Java版本更改为1.8 2)在其他任何依赖项声明之前将aws依赖项在pom中上移

此后有效。

答案 4 :(得分:0)

我遇到了同样的问题,我下载了最新版本的Joda-time jar,并将其手动添加到添加了Project-structure-module的joda jar中 在这里https://github.com/JodaOrg/joda-time/releases拿了罐子饼干,它起作用了