使用 Gradle 创建模块化的 SpringBoot 应用程序

Creating a Modularized SpringBoot app with Gradle

我正在尝试使用一个 Java 模块设置一个简单的应用程序。有父应用程序和一个名为“功能”的模块。

尽管 IDE 自动完成工作正常,但我在构建过程中不断收到此错误:

error: module not found: spring.web

我当前的设置是:

我已经使用“gradle 模块”完成了十几个其他应用程序,并且我使用的是相同的目录结构:

build.gradle是这样的:

plugins {
    id 'org.springframework.boot' version '2.5.0-SNAPSHOT'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.mrv'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_11

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

java {
    modularity.inferModulePath = true
}

allprojects {
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    repositories {
        mavenCentral()
        maven { url 'https://repo.spring.io/milestone' }
        maven { url 'https://repo.spring.io/snapshot' }
    }

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
    }
}

dependencies {
    implementation project(':feature')
}

“功能”模块-info.java(出现问题的地方)是这样的:

module com.mrv.modules.feature {
    requires spring.web;
}

我自己基于一些 Maven 项目以及 Gradle documentation。我还尝试将我的主要 class ModulesApplication 放在它自己的模块中,结果相同。

我是不是漏掉了什么?

几个小时后我找到了解决方案,它非常简单:将 modularity.inferModulePath = true 应用于所有项目:

plugins {
    id 'org.springframework.boot' version '2.5.0-SNAPSHOT'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.mrv'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_11

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

allprojects {
    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'

    repositories {
        mavenCentral()
        maven { url 'https://repo.spring.io/milestone' }
        maven { url 'https://repo.spring.io/snapshot' }
    }

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
    }
    
    /* >>>> MOVED HERE <<<<*/
    java {
        modularity.inferModulePath = true
    }

}

dependencies {
    implementation project(':feature')
}

这是我做的sample project,以后可以参考