需要从 spring boot 2.0 中排除 spring-orm 模块并从 jar 文件中使用它的旧版本

Posted

技术标签:

【中文标题】需要从 spring boot 2.0 中排除 spring-orm 模块并从 jar 文件中使用它的旧版本【英文标题】:Need to exclude spring-orm module from spring boot 2.0 and use an older version of it from a jar file 【发布时间】:2019-07-30 05:32:27 【问题描述】:

我有一个 .jar 工件,它在技术上是一个 DAO 层,它是使用较旧的技术堆栈构建的。

Java 1.6 Spring 3.1.0.RELEASE 休眠 3.5.6-Final 马文

我想将此 .jar 作为依赖项添加到我的新 spring boot 2.x 项目中,并用作应用程序的数据层。

新的应用技术栈:

Java 1.8 Spring Boot 2.1.3 Spring 框架 5 分级

据我了解,我在 build.gradle 中添加了较旧的 jar 作为依赖项,并排除了 spring-orm 模块。但是 gradle 仍然会拉取最新版本,而不是使用旧 .jar 依赖项中的版本。

build.gradle

group = 'com.test.app'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories 
    mavenCentral()
    maven
        credentials 
            username = "$nexusUsername"
            password = "$nexusPassword"
        
        url "$nexusUrl"
    


// exluded spring-orm from spring boot 2.x
configurations 
    compile.exclude module: 'spring-orm'


dependencies 
    // my older dao dependency
    implementation "com.my.older.core:dao:0.3.8-SNAPSHOT"

    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'

由于 dao .jar 使用的是旧版本,因此我需要在 spring boot 2.x 中让应用程序使用旧版本的 orm 版本而不是新版本。

对此的任何线索将不胜感激。 谢谢。

【问题讨论】:

不,你不想添加那个 jar。你不应该混合来自不同版本的框架的 jars。这将导致奇怪和严重的错误。看看它是否适用于常规的 Spring Orm 版本,如果不能修复你的旧 dao 或者不重用而是重建。但永远不要开始混合来自不同版本框架的 jar。一种解决方案可能是降级到较旧的 Spring Boot 版本,以查看 Spring 4.x 版本是否适用于您的 dao。 @M.Deinum 感谢您的洞察力。看来你说的太真实了。但是我处于一种情况,要么选择重用那个 jar,要么在这个新应用程序中重新编写整个 dao 层。可能我应该尝试降级到 Spring Boot 1.x 你最好重写它。如果那里有实体,您也许可以重用它们。然后只需使用 Spring Data JPA 即可快速实现所需的存储库/daos。 是的,你是对的。降级spring boot也没有帮助,所以我现在正在重写它。感谢您的帮助。 取决于你做什么,你不应该混合版本,所以坚持使用 Spring Boot 1.x 附带的版本并尝试你的 dao 依赖。不要尝试包含旧的 spring-orm 依赖等。 【参考方案1】:
configurations.all  
    resolutionStrategy.force 'org.springframework:spring-orm:oldversion'

希望对你有帮助

【讨论】:

永远不要混合来自不同版本框架的不同 jars。这是等待发生的麻烦。

以上是关于需要从 spring boot 2.0 中排除 spring-orm 模块并从 jar 文件中使用它的旧版本的主要内容,如果未能解决你的问题,请参考以下文章

Java Spring Boot 测试:如何从测试上下文中排除 java 配置类

从 Spring-Boot 测试中排除 elasticsearchTemplate

从 Gradle 中的 Spring Boot 中排除 Tomcat 依赖项

如何从 spring-boot-starter-parent 中排除特定依赖项

从 Spring Boot 单元测试中排除 Spring Cloud Config Server

Spring Boot 2.0干货系列:Spring Boot1.5X升级到2.0指南