【问题标题】:Maven modules use different versions of same library and parent compile gives errorMaven 模块使用相同库的不同版本并且父编译给出错误
【发布时间】:2021-04-06 22:01:22
【问题描述】:

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

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

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

如何解决?

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

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

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

【问题讨论】:

  • 那么你在哪里定义javax.servlet.api的版本?
  • 在 API 项目中。
  • 那么这不会影响其他项目的构建。错误在其他地方。
  • 我找到了解决办法并贴出来了,简直不敢相信!你有什么解释吗?

标签: java spring-boot maven multi-module


【解决方案1】:

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

【讨论】:

  • 我找到了解决办法并贴出来了,简直不敢相信!你有什么解释吗?
  • 非常感谢您的反馈,请在此处找到示例源代码:github.com/abmjunaed/maven-multi-project-error 我添加了非常少的代码来重现该场景,以便您可以拥有看看和帮助!谢谢!
【解决方案2】:

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

spring-boot-starter-web 的依赖是在 library 项目 的依赖之后造成的。

现在我已经添加了

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>

【讨论】:

  • 看看mvn dependency:tree 找出有问题的依赖来自哪里是明智的。
  • 非常感谢您的反馈,我尝试了 mvn dependency:tree 但无法理解。请在此处找到示例源代码:github.com/abmjunaed/maven-multi-project-error 我添加了非常少的代码来重现该场景,以便您查看和帮助!谢谢!
  • “lib”和“library”应该一样吗?
  • 对不起,我的回答中的错字,我现在更新了。 Github 代码是唯一的事实:)
猜你喜欢
  • 2012-09-07
  • 1970-01-01
  • 2019-07-28
  • 2016-09-24
  • 2016-05-14
  • 1970-01-01
  • 2012-02-24
  • 2016-01-29
相关资源
最近更新 更多