在 docker 文件中无法识别 Wiremock 依赖项

问题描述

我有一个简单的 maven 应用程序,其中有几个类,其中一个主类是 wiremockApplication.java 和 Stubs.java,它使用 wiremockServer 对象来启动一个 wiremock 服务器。我用一些 json 文件存根了它,当我作为独立应用程序运行时它可以工作。但是当我将它放在 docker 文件中时,即使我将独立 jar 放在 docker 文件的类路径中,它也无法识别 wiremockServer 类。 它给出了找不到类的错误

Exception in thread "main" java.lang.NoClassDefFoundError: com/github/tomakehurst/wiremock/wiremockServer
        at com.homesite.api.wiremock.Stubs.setUp(Stubs.java:16)
        at com.homesite.api.wiremock.wiremockApplication.main(wiremockApplication.java:8)
Caused by: java.lang.classNotFoundException: com.github.tomakehurst.wiremock.wiremockServer
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
        ... 2 more

下面是两个文件和docker文件。我不确定当独立 jar 位于类路径中时为什么会出现此错误。 这真的让我觉得 jar 没有在类路径中设置,但不知道为什么会这样。

wiremockApplication.java
------------------------
public class wiremockApplication { // Main method
    public static Stubs stubs = new Stubs();
    public static void main(String[] args) {
        stubs.setUp()
                .stubForPost("DummyPost.json")
                .status();
    }
}

Stubs.java
----------
public class Stubs { // Stubbing class
    private JsonUtil jsonUtil;
    public wiremockServer wiremockServer;

    public Stubs setUp() { // Stubbing setup
        wiremockServer = new wiremockServer(7080);
        wiremockServer.start();
        jsonUtil = new JsonUtil();
        return this;
    }

    public Stubs stubForPost(String responseFileName) { // Stub method
        wiremockServer.stubFor(post("/dummyPost")
                .willReturn(aResponse()
                        .withStatus(200)
                        .withFixedDelay(200)
                        .withHeader("Content-Type","application/json")
                        .withBodyFile(responseFileName)));
        return this;
    }
}

Docker file
-----------
FROM maven:3.6.3-openjdk-11

ENV wiremock_PORT=8080
RUN apt-get install wget -y 
RUN wget -O wiremock-standalone.jar 'https://repo1.maven.org/maven2/com/github/tomakehurst/wiremock-standalone/2.27.2/wiremock-standalone-2.27.2.jar' --no-check-certificate 
copY target/*api*.jar /app.jar  // download the standalone wiremock
RUN ls -a
EXPOSE ${wiremock_PORT}
ENTRYPOINT ["java","-classpath","wiremock-standalone.jar","-jar","app.jar"]

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)