Maven 模块使用同一库的不同版本,父编译会出错

Maven modules use different versions of same library and parent compile gives error

我有一个 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 中不可用。 12=]

如何解决?

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

我添加了非常少的代码来重现该场景,以便您查看并提供帮助!

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

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

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

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

现在我已经添加了

spring-boot-starter-web

作为第一个依赖并且

lib-project

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

<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>