springboot:managed版本是1.3.2.RELEASE工件在org.springframework.Boot:springboot依赖项:1.3.2.RELEASE中管理

springboot:managed版本是1.3.2.RELEASE工件在org.springframework.Boot:springboot依赖项:1.3.2.RELEASE中管理,spring,hibernate,maven,spring-boot,Spring,Hibernate,Maven,Spring Boot,我使用Spring boot创建了一个框架应用程序。这是我的pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h

我使用Spring boot创建了一个框架应用程序。这是我的
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lynas</groupId>
    <artifactId>SpringMVCHibernate</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>SpringMVCHibernate</name>
    <description>SpringMVCHibernate</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
        </dependency>
    </dependencies>

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


</project>

4.0.0
com.lynas

当我尝试手动添加Hibernate 5.1.0.Final时,会出现以下通知:

覆盖hibernate core的托管版本4.3.11.Final


帮助我解决这些问题。

Spring Boot
自动定义本附录中列出的依赖项的版本。

Eclipse只是在提醒大家。如果确实要更改该依赖项的版本,可以忽略该警告

更新:


参见Andy的回答:

Spring Boot为Hibernate提供了依赖关系管理。Eclipse发出的警告告诉您,您已通过直接在依赖项上声明版本来覆盖此依赖项管理。这是一件冒险的事情,因为您可能会在类路径上混合使用Hibernate版本。事实上,查看pom,您已经覆盖了hibernate core的版本,但没有覆盖hibernate entitymanager的版本。这意味着在类路径上将有前者的5.1.0.Final和后者的4.3.11.Final。这几乎肯定会导致运行时出现问题

使用Hibernate 5的一种更安全的方法是覆盖Boot的依赖项管理。当您使用
spring boot starter父级
作为pom的父级时,您可以通过覆盖
hibernate.version
属性来实现这一点:

<properties>
    <hibernate.version>5.1.0.Final</hibernate.version>
</properties>

5.1.0.1最终版本
这将确保Spring Boot为其提供依赖项管理的所有Hibernate模块都具有所需的版本


最后,请注意。Hibernate5.1是一个非常新的版本,包含了一些突破性的变化,甚至是从5.0.x开始。因此,您可能会遇到一些不兼容问题。如果您不想处于领先地位,5.0.x可能是一个更安全的选择。它将成为Spring Boot 1.4中的默认Hibernate版本。

按照您的答案和参考链接,Hibernate core的最新版本为5.1.0.Final,Spring Boot中的默认版本为4.3.11.Final。这是弹簧靴的缺点吗?这是弹簧靴的特点和巨大的卖点。您得到了经过良好测试和稳定的依赖关系矩阵,但在这个矩阵中并不是总能得到最前沿的东西。如果要使用较新的依赖项,可以覆盖默认的Spring启动版本。@dovy Spring启动中存在github问题,无法支持Hibernate 5。这个警告不应该被忽视。在当前配置中,服务器上将混合使用Hibernate版本classpath@AndyWilkinson谢谢你让我知道。您的回答修复了我在生成的war中遇到的多个hibernate jar的问题。谢谢关于如何使用Gradle执行此操作,您有什么建议吗?我想知道在哪里可以找到列表来查找可以覆盖为
的属性名称?一定有一个列表我还找不到。在
spring boot dependencies
pom中定义了一个列表,它是
spring boot starter父项的父项。IDE应该允许您导航到pom以查看其内容。否则,您可以在GitHub上找到源代码。以下是2.1.5版本,例如: