Maven 模块使用相同库的不同版本,父编译给出错误

问题描述

我有一个 springboot 项目,它使用来自 org.apache.tomcat.embed:tomcat-ember-core9.0.34 的包 javax.servlet。 (这是来自springboot)

我有一个 maven 项目(API 项目),它使用这个 javax.servlet 但版本为 2.3

现在我创建了一个父 maven 项目,其中包含以上 2 个项目作为模块。 当我单独编译springboot项目时,一切正常。 但是当我编译父项目时,它需要javax.servlet.api 2.3版来编译springboot项目并给出错误,因为springboot正在使用的2.3中没有可用的方法

如何解决这个问题?

请在此处找到示例源代码 https://github.com/abmjunaed/maven-multi-project-error

添加了非常少的代码来重现场景,以便您可以查看和帮助!

在IntelliJ的External Libraries中,我可以看到父项目的libs和maven正在使用javax-servlet-api:2.3编译springBoot项目并给出错误

enter image description here

解决方法

您应该在父模块的 pom 中放置正确版本的 javax.servlet 依赖项。这将覆盖 api 项目中提到的 javax.servlet 依赖项。要找到正确的版本,您必须点击并尝试使用 javax.servlet 版本,最新的 Spring Boot 包应该支持 2.3 版。试试看!!

,

找到了解决方案,我简直不敢相信!

spring-boot-starter-web 的依赖是在库项目 的依赖之后,这导致了问题。

现在我添加了

spring-boot-starter-web

作为第一个依赖项和

库项目

作为第二个依赖项,一切正常!

<dependencies>
    <dependency> <!--1st dependency-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>library</artifactId>
        <version>0.0.2-SNAPSHOT</version>
    </dependency>
</dependencies>