Maven WebClient 依赖错误(在 Docker 容器中)

Maven WebClient dependency errors (in Docker container)

当我尝试在 Docker 容器内的 Java Spring 中使用 WebClient 连接到 REST 服务时出现错误。我想知道是否有人可以告诉我问题出在哪里?

运行时错误:java.lang.NoClassDefFoundError: org/springframework/http/client/reactive/ClientHttpConnector

依赖关系:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-webflux -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <version>2.4.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.projectreactor.netty/reactor-netty -->
    <dependency>
        <groupId>io.projectreactor.netty</groupId>
        <artifactId>reactor-netty</artifactId>
        <version>1.0.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.projectreactor/reactor-core -->
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-core</artifactId>
        <version>3.4.5</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.9.RELEASE</version>
    </dependency>
    <!-- Servlet -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

Docker文件:

FROM tomcat:8-jre8
    RUN ["rm", "-rf", "/usr/local/tomcat/webapps/ROOT"] 
    COPY mvctest.war /usr/local/tomcat/webapps/ROOT.war
    CMD ["catalina.sh", "run"]

我认为这与您 运行 正在 Docker 中并没有真正的关系。 可能是 spring 版本冲突的原因。在您提供的 pom 中,spring boot 2.x 与 spring 5.x jar 一起工作,但是您调出了 4.3.9.RELEASE of spring-webwebmvc.

通常你应该完全忽略 jar 版本,spring boot 将添加所有相关的传递依赖项。

另一件可能有问题的事情是您试图同时使用 webflux 和 webmvc。它可能在 spring 启动时,但首先要考虑它是否真的是你需要的。

要查看确切的版本 - 删除所有 spring 相关的依赖项和 运行 mvn dependency:tree - 你会看到树将显示哪些 spring 版本。