无法初始化类com.amazonaws.partitions.PartitionsLoader

使用Eclipse Mars。我已经通过安装软件从help.Iow添加了aws java sdk 1.11.123。当我运行Tomcat Server 7时,我收到此错误:

May 02, 2017 11:57:32 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [PdsServlet] in context with path [/PdsAWS] threw exception [java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.partitions.PartitionsLoader] with root cause java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.partitions.PartitionsLoader

我也明白了

java.lang.NoSuchFieldError: ALLOW_FINAL_FIELDS_AS_MUTATORS

但是当我检查库时,我可以看到PartitionsLoader.How可以解决这个问题吗?

在此处输入图像描述

更多似乎相关的错误:

 May 03, 2017 9:39:04 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container java.lang.NoClassDefFoundError: Could not initialize class com.amazonaws.partitions.PartitionsLoader 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.services.s3.AmazonS3Client.createSigner(AmazonS3Client.java:3428) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4156) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4116) at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1700) at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1563) at com.tradingtechnologies.pdsawssql.aws.s3.S3HealthCheck.put(S3HealthCheck.java:83) at com.tradingtechnologies.pdsawssql.aws.s3.S3HealthCheck.put(S3HealthCheck.java:56) at com.tradingtechnologies.pdsawssql.aws.s3.S3HealthCheck.execute(S3HealthCheck.java:116) at com.tradingtechnologies.pdsawssql.sql.ext.HealthCheck.execute(HealthCheck.java:54) at com.tradingtechnologies.pdsservlet.HealthServlet.doGet(HealthServlet.java:31) at sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at com.tradingtechnologies.pdsservercommon.filters.HttpHeaderFilter.doFilter(HttpHeaderFilter.java:24) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 

java.lang.NoSuchFieldError:ALLOW_FINAL_FIELDS_AS_MUTATORS

这听起来好像你从某个地方拿起了旧版本的jackson。 初始化静态成员字段时,PartitionsLoader引用MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS。 如果在运行时选择的MapperFeature版本没有此字段,则生成的exception将导致PartitionsLoader的类初始化过程失败。 然后,引用该类的后续尝试将抛出您正在看到的exception。

版本2.2中添加了ALLOW_FINAL_FIELDS_AS_MUTATORS。 你拿到哪个版本?

Tomcat有自己的依赖文件。 可以在Eclipse中配置构建路径,而不是将依赖项添加到Tomcat以进行构建/部署,这可能导致Java抛出该错误。

在Eclipse中将项目重新创建为动态Web项目(如果您不熟悉,请查看有关如何执行此操作的文档)。 然后在自动生成的“WEB-INF / lib”文件夹中包含任何第三方jar或lib,以及从Eclipse中的源代码运行所需的构建路径(也就是您现在的方式)。 然后,当您准备好部署时,导出到war文件,并且“WEB-INF / lib”文件夹中的所有必需的库将对您的编译源可见。

好吧,我面临同样的依赖地狱挑战,并花了很长时间来清理。 以下是我需要同步的依赖项集 –

  • 经验法则 :始终使用相同的aws sdk依赖版本( core / s3 / ec2等)
  • 在项目中使其他依赖(由aws使用)保持一致。
  • 这包括以下内容
    • commons-http与AWS使用的http-client冲突
    • 删除commons-http ,使用一致的http-client和http-core版本
    • 冲破fastxml.jackson库。 使用aws使用的一致verison。
      • 这包括约4个jar子( jackson-databind,core,annotations,cbor