【问题标题】:Spring boot 2.1.7 having tomcat-embed-core conflitSpring Boot 2.1.7 具有 tomcat-embed-core conflit
【发布时间】:2019-09-19 05:34:12
【问题描述】:

我正在将现有的 Spring 项目迁移到 Spring boot。无法运行 Spring Boot 应用程序并显示以下错误。

错误日志显示 tomcat-embed-core 存在冲突。 在 eclipse 中,porm.xml 的依赖层次如下所示

我排除了 maven 架构师,并尝试运行显示以下错误的应用程序

porm.xml

    <modelVersion>4.0.0</modelVersion>
    <artifactId>MyService</artifactId>
    <packaging>jar</packaging>
    <properties>
        <java.version>1.8</java.version>
        <!-- 2.1.3.RELEASE -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <springframework.boot.version>2.1.7.RELEASE</springframework.boot.version>
    </properties>

    <name>MyService</name>
    <url>http://maven.apache.org</url>
    <dependencies>  
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sybase.jdbc3.jdbc</groupId>
            <artifactId>jconn3</artifactId>
            <version>${jconn3.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>               
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-juli</artifactId>
            <version>${tomcat.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jdbc</artifactId>
            <version>${tomcat.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>

                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>

            </plugins>
        </pluginManagement>
    </build>
</project>

这个porm.xml有什么问题

【问题讨论】:

  • 您能否也发布完整的 pom.xml 或至少更多,我没有看到 spring-boot-import 您是使用父 pom 还是其他方式?
  • 我觉得你不需要导入tomcat-jdbc,只需要导入spring-boot-starter-webspring-boot-starter-data-jpa``spring-boot-starter-test就足够了,Ref:github.com/dineshbhagat/spring-boot-web-jpa/blob/master/…
  • 我正在使用 spring-boot-maven-plugin
  • 添加tomcat-juli的任何具体原因?
  • 或从start.spring.io 创建虚拟项目,添加所有依赖项并将 pom.xml 与项目的 pom.xml 进行比较

标签: spring spring-boot spring-boot-maven-plugin


【解决方案1】:

在哪里

${tomcat.version}

定义了吗?

该版本可能与自动包含在 spring boot 项目中的 tomcat 版本不匹配。

因此冲突。

去这里:

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web/2.1.7.RELEASE

并开始关注编译依赖项,您会发现自动包含在 2.1.7.RELEASE 中的版本。并且您必须更改覆盖 springboot 自动包含 tomcat 版本的其他包含。

再次,遵循编译的依赖路径。


所以下面是你应该通过爬取 COMPILED 依赖跟踪找到的(在我的回答中直接从上面)

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/2.1.7.RELEASE

你会发现你需要设置

tomcat.version 到

9.0.22

通过将 tomcat.version 定义为 8.x,您正在破坏它。


换一种说法

你必须走 ~way~ 回到 springboot 1.5.2.RELEASE 或 1.5.3.RELEASE

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/1.5.2.RELEASE

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/1.5.3.RELEASE

(同样,在上面的两个链接中,查看了 COMPILE 依赖项)

要找到一个接近 tomcat 8.5.x(其中 8.5.x 是您尝试使用的版本)的 tomcat 版本(自动包含在 springboot 中)

那已经很老了。


您缺少的原则是 springboot auto 包含依赖项。您导入的任何其他内容都必须与 springboot auto 包含的所有内容相得益彰。

而您当前的 tomcat.version 值与 springboot 2.1.7.RELEASE 自动包含的所有内容都不是很好。


现在您已经经历了所有这些。你会发现如果你更完全地参与 springboot 世界,你会让你的生活更轻松。

很多时候,springboot 会有一个(子)包,它会带来你真正想要的东西。

spring-boot-starter-jdbc

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc/2.1.7.RELEASE

您最好带上那个包裹,而不是亲自挑选。 Aka,摆脱你的“tomcat-jdbc”包含,看看 spring-boot-starter-jdbc 是否可以给你想要的。

spring-boot 的诅咒/祝福在于它是它自己的宇宙。但是,如果您参与其中,您可能希望更频繁地遵守其规则。


PS

是 pom.xml,不是 pom.xml

【讨论】:

  • 8.5.12
  • 我问它在哪里定义。它不在您发布的 POM.xml 中。
  • 那个版本是在我的父porm.xml中定义的
【解决方案2】:

尝试添加 spring-boot-starter-tomcat 作为依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

删除 tomcat-julitomcat-jdbc 依赖项。如果需要JDBC支持,添加对应的starter:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

如果您使用 JSP 视图,您可能还需要以下依赖项:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

另外,请注意您的依赖项版本。 Spring Boot 的父 POM 定义了许多常见工件的版本管理,因此您无需为这些库设置 &lt;version&gt;&lt;/version&gt;。见https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/htmlsingle/#appendix-dependency-versions

【讨论】:

    猜你喜欢
    • 2019-11-30
    • 2018-11-12
    • 2021-05-02
    • 2020-01-31
    • 2020-01-05
    • 2020-03-07
    • 2017-01-22
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多