在Docker容器中部署Wiremock时发生NoClassDefFoundError

我有一个使用Ivy / Ant进行依赖关系/构build的Wiremock项目。 当我从Eclipse中的启动文件运行它时,它成功启动服务器,请求成功。 但是,当我将其构build为Docker镜像并运行它时,它立即崩溃。

dockerbuild设:

docker build --force-rm -t <REPO_LOCATION>/assignment_form_api_mock:latest -t <REPO_LOCATION>/assignment_form_api_mock:1.0.6 . 

docker运行:

 docker run -d --name form-api-mock -p 10404:8080 <REPO_LOCATION>/assignment_form_api_mock --verbose --extensions="com.gatesbiz.assignmentdispatch.mock.RequestTemplateTransformerGlobal,com.gatesbiz.assignmentdispatch.mock.AdminAreasRequestTransformer,com.gatesbiz.assignmentdispatch.mock.FormsRequestTransformer,com.gatesbiz.assignmentdispatch.mock.VehicleRequestTransformer" 

在加载扩展docker时logging这个堆栈跟踪:

 2017-08-14 18:05:24.276 Verbose logging enabled SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/type/TypeReference at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.github.tomakehurst.wiremock.extension.ExtensionLoader$3.apply(ExtensionLoader.java:75) at com.github.tomakehurst.wiremock.extension.ExtensionLoader$3.apply(ExtensionLoader.java:71) at wiremock.com.google.common.collect.Iterators$8.transform(Iterators.java:799) at wiremock.com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) at wiremock.com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) at wiremock.com.google.common.collect.Maps.uniqueIndex(Maps.java:1163) at wiremock.com.google.common.collect.Maps.uniqueIndex(Maps.java:1140) at com.github.tomakehurst.wiremock.extension.ExtensionLoader.asMap(ExtensionLoader.java:43) at com.github.tomakehurst.wiremock.extension.ExtensionLoader.loadExtension(ExtensionLoader.java:32) at com.github.tomakehurst.wiremock.extension.ExtensionLoader.load(ExtensionLoader.java:39) at com.github.tomakehurst.wiremock.standalone.CommandLineOptions.extensionsOfType(CommandLineOptions.java:277) at com.github.tomakehurst.wiremock.core.WireMockApp.<init>(WireMockApp.java:80) at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:69) at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.run(WireMockServerRunner.java:65) at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.main(WireMockServerRunner.java:113) Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.type.TypeReference at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 17 more 

当我search时,我发现人们遇到了jackson的版本问题: https : //github.com/tomakehurst/wiremock/issues/282

出于这个原因,我正在使用电线独立。 我也试着隐含覆盖杰克森版本,以确保使用相同版本的jackson注释,jackson数据绑定和jackson核心。 如果我不隐式添加依赖关系,则会得到相同的错误,但是带入的jar文件是以下版本:

 jackson-annotations-2.1.2.jar jackson-core-2.1.3.jar jackson-databind-2.1.3.jar 

常春藤依赖关系:

 <dependencies> <dependency org="com.github.tomakehurst" name="wiremock-standalone" rev="2.7.1" conf="compile->default"/> <dependency org="io.rest-assured" name="rest-assured" rev="3.0.3" conf="test->default"/> <dependency org="com.gatesbiz.common" name="logback_core" rev="2.0.13" conf="compile->compile;test->test"/> <dependency org="commons-io" name="commons-io" rev="2.5"/> <dependency org="com.fasterxml.jackson.core" name="jackson-annotations" rev="2.9.0"/> <dependency org="com.fasterxml.jackson.core" name="jackson-databind" rev="2.9.0"/> <dependency org="com.fasterxml.jackson.core" name="jackson-core" rev="2.9.0"/> </dependencies> 

Dockerfile:

 FROM rodolpheche/wiremock ADD src/test/resources /home/wiremock ADD /bin /var/wiremock/extensions/af-extensions.jar 

泊坞窗,compose.yml

 assignment-form-api-mock: container_name: assignment-form-api-mock image: <REPO_LOCATION>/assignment-form-api-mock ports: - 10404:8080 command: --extensions="com.gatesbiz.assignmentdispatch.mock.RequestTemplateTransformerGlobal,com.gatesbiz.assignmentdispatch.mock.AdminAreasRequestTransformer,com.gatesbiz.assignmentdispatch.mock.FormsRequestTransformer,com.gatesbiz.assignmentdispatch.mock.VehicleRequestTransformer" 

Interesting Posts