多模块 Gradle 项目 - 从 Spring-Boot 1.5 迁移到 2.1

Posted

技术标签:

【中文标题】多模块 Gradle 项目 - 从 Spring-Boot 1.5 迁移到 2.1【英文标题】:Multi-Module Gradle project - Migrate from Spring-Boot 1.5 to 2.1 【发布时间】:2019-06-26 10:13:43 【问题描述】:

我想将多模块 spring-boot 1.5 项目迁移到 spring-boot 2.1。这是一个 gradle 项目(4.9),但不知何故我没有解决。

使用 spring-boot 1.5.9 应用程序编译良好,依赖于其他模块的模块也可以解析类。

升级到 spring-boot 2.0 或 2.1 后,我无法让一个模块解析另一个模块的类。

在我的项目中,项目 api 依赖于库。同样,这个 build.gradle 对我来说适用于 Spring Boot 1.5.9。我很高兴有任何帮助。

buildscript 
    ext  springBootVersion = '1.5.9.RELEASE' 
    repositories 
        mavenLocal()
        mavenCentral()
    
    dependencies 
        classpath "o.s.b:spring-boot-gradle-plugin:$springBootVersion"
    


allprojects 
    apply plugin: 'eclipse'
    apply plugin: 'maven'
    apply plugin: 'maven-publish'

    group = 'n.h.f.calculator'
    version = "0.1.0-SNAPSHOT"



subprojects 
    apply plugin: 'groovy'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    sourceCompatibility = JavaVersion.VERSION_1_8

    repositories 
        mavenLocal()
        mavenCentral()
    

    dependencies 
        compile       'o.c.groovy:groovy'
        testCompile   'o.s.b:spring-boot-starter-test'
    


project(':' + rootProject.name + '-library') 
    dependencies 
        compile 'org.springframework.boot:spring-boot-starter'
    


project(':' + rootProject.name + '-api') 
    dependencies 
        compile project (':' + rootProject.name + '-library')
        compile         'o.s.b:spring-boot-starter-web'
    

然后我成为模块*-api 的编译器问题,它说模块*-lib 的类无法解析。

例子

C:\Development\Projects\Immosoft\financial-calculator\api\src\main\groovy\net\hemisoft\financial\calculator\api\BasicApi.groovy: 7: unable to resolve class net.hemisoft.financial.calculator.library.utils.BasicCalculator
@ line 7, column 1.
import net.hemisoft.financial.calculator.library.utils.BasicCalculator

【问题讨论】:

您在构建或运行时遇到的错误是什么? 我有模块的编译器问题,它找不到它正在使用的其他模块的类。用spring-boot 1.5没问题 【参考方案1】:

我找到了解决方案。神奇的词是jar enabled = true bootJar enabled = false 。我将它放入包含应用程序库(后端类)的项目中。

buildscript 
    ext 
        springBootVersion = '2.1.2.RELEASE'
    
    repositories 
        mavenLocal()
        mavenCentral()
    
    dependencies 
        classpath "o.s.boot:spring-boot-gradle-plugin:$springBootVersion"
    


...

project(':' + rootProject.name + '-library') 
    dependencies 
        compile 'o.s.boot:spring-boot-starter'
    

    jar 
        enabled = true
    

    bootJar 
        enabled = false
    

项目现在在使用 gradle 构建时编译。

【讨论】:

以上是关于多模块 Gradle 项目 - 从 Spring-Boot 1.5 迁移到 2.1的主要内容,如果未能解决你的问题,请参考以下文章

多模块 Spring Boot 项目中的 Gradle 依赖插件

使用Spring Boot Gradle插件的多模块项目

Spring boot 和 Gradle 多模块项目,无法正确加载依赖项

Spring Boot gradle 多模块项目未解决的引用错误

线程“main”中的异常 java.lang.ClassNotFoundException - Spring Boot,多模块 gradle 项目

无法集成测试 gradle 多模块 Spring-Boot-Application