使用 Gradle 创建模块化的 SpringBoot 应用程序
Creating a Modularized SpringBoot app with Gradle
我正在尝试使用一个 Java 模块设置一个简单的应用程序。有父应用程序和一个名为“功能”的模块。
尽管 IDE 自动完成工作正常,但我在构建过程中不断收到此错误:
error: module not found: spring.web
我当前的设置是:
- Java 12
- SpringBoot 2.5.0-SNAPSHOT
- Gradle6.8.3
我已经使用“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,以后可以参考
我正在尝试使用一个 Java 模块设置一个简单的应用程序。有父应用程序和一个名为“功能”的模块。
尽管 IDE 自动完成工作正常,但我在构建过程中不断收到此错误:
error: module not found: spring.web
我当前的设置是:
- Java 12
- SpringBoot 2.5.0-SNAPSHOT
- Gradle6.8.3
我已经使用“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,以后可以参考