maven模块使用同一个库的不同版本,并且父编译会产生错误

avwztpqn  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(322)

我有一个springboot项目,它使用org.apache.tomcat中的javax.servlet包。embed:tomcat-ember-core9.0.34. (来自springboot)
我有另一个maven项目(api项目),它使用javax.servlet,但版本为2.3
现在我已经创建了一个父maven项目,其中包括以上两个作为模块的项目。当我单独编译springboot项目时,一切都很好。但是当我编译父项目时,它使用javax.servlet.api版本2.3来编译springboot项目并给出错误,因为springboot使用的方法在2.3中不可用。
如何解决这个问题?
请查找示例源代码here:httpshttp://github.com/abmjunaed/maven-multi-project-error
我已经添加了非常小的代码来重现这个场景,这样您就可以查看和帮助了!
在intellij的外部库中,我可以看到父项目的libs和maven都使用javaxservlet-api:2.3 to 编译springboot项目并给出错误

yrefmtwq

yrefmtwq1#

找到了解决办法,我简直不敢相信!
对springbootstarterweb的依赖性在库项目的依赖性之后,这就是问题的根源。
现在我补充说
Spring启动机web
作为第一依赖和
lib项目
作为第二依赖,一切正常!

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

tvz2xvvm2#

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

相关问题