将具有 Gradle 的单片 Spring 引导应用程序转换为多模块失败
Failed on Converting Monolithic Spring Boot App with Gradle into Multi Module
实际上我有一个带有 gradle 的整体式 spring 启动应用程序,我想将其转换为多模块。
它只是一个简单的应用程序来做 CRUD 书。
我的应用结构如下,
simple-app
| src/main/java/example/simpleapp
| -------------------------------/controller`
| -------------------------------/exception
| -------------------------------/model
| -------------------------------/repository
| -------------------------------/service
| -------------------------------SimpleAppAplication
| build.gradle
| settings.gradle
一步一步我把所有的包分成模块,
然后我的文件夹结构更改为如下所示
simple-app
| controller
| | src
| | build.gradle
| exception
| | src
| | build.gradle
| main-app
| | src
| | build.gradle
| model
| | src
| | build.gradle
| repository
| | src
| | build.gradle
| service
| | src
| | build.gradle
| build.gradle
| settings.gradle
如果我 运行 这个项目,它工作得很好并且 return 结果应该是 return。
但是,当我构建项目时,它变成了这样的错误。
PC:~/simple-app$ ./gradlew build
> Task :repository:compileJava FAILED
/simple-appp/repository/src/main/java/example/simpleapp/repository/BookRepository.java:3: error: package nanihutagaol.simpleapp.model does not exist
import example.simpleapp.model.Book;
^
simple-app/repository/src/main/java/example/simpleapp/repository/BookRepository.java:9: error: cannot find symbol
public interface BookRepository extends JpaRepository<Book, Long> {
^
symbol: class Book
2 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':repository:compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.4.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 2s
3 actionable tasks: 1 executed, 2 up-to-date
我不明白为什么会出现这样的错误,因为模型包是存在的。希望你们中的一个能给出解决方案。
之前谢谢...
edited:
于 repository/build.gradle
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation project(":model")
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
于 model/build.gradle
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
}
在尝试理解其他类似主题后,我终于可以解决错误。
所以我在 root/build.gradle
上的第一个语法如下
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
implementation project(":main-app")
}
test {
useJUnitPlatform()
}
subprojects {
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
}
然后我通过在 root/build.gradle
和 subprojects/build.gradle
上添加以下代码来更新它
bootJar {
enabled = false
}
jar {
enabled = true
}
根据 https://spring.io/guides/gs/multi-module/ 的指南,该代码用于告诉 Gradle 不要为库项目构建可执行 jar。
我不知道为什么我之前错过了这一步。所以,我最后的 root/build.gradle
看起来像
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
bootJar {
enabled = false
}
jar {
enabled = true
}
repositories {
mavenCentral()
}
dependencies {
implementation project(":main-app")
}
test {
useJUnitPlatform()
}
subprojects {
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
bootJar {
enabled = false
}
jar {
enabled = true
}
}
然后我更新所有 subproject/build.gradle
,只需添加依赖项标记即可。例如repository/build.gradle
dependencies {
implementation project(":model")
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
这就是我所有的问题解释...:)
实际上我有一个带有 gradle 的整体式 spring 启动应用程序,我想将其转换为多模块。 它只是一个简单的应用程序来做 CRUD 书。
我的应用结构如下,
simple-app
| src/main/java/example/simpleapp
| -------------------------------/controller`
| -------------------------------/exception
| -------------------------------/model
| -------------------------------/repository
| -------------------------------/service
| -------------------------------SimpleAppAplication
| build.gradle
| settings.gradle
一步一步我把所有的包分成模块, 然后我的文件夹结构更改为如下所示
simple-app
| controller
| | src
| | build.gradle
| exception
| | src
| | build.gradle
| main-app
| | src
| | build.gradle
| model
| | src
| | build.gradle
| repository
| | src
| | build.gradle
| service
| | src
| | build.gradle
| build.gradle
| settings.gradle
如果我 运行 这个项目,它工作得很好并且 return 结果应该是 return。
但是,当我构建项目时,它变成了这样的错误。
PC:~/simple-app$ ./gradlew build
> Task :repository:compileJava FAILED
/simple-appp/repository/src/main/java/example/simpleapp/repository/BookRepository.java:3: error: package nanihutagaol.simpleapp.model does not exist
import example.simpleapp.model.Book;
^
simple-app/repository/src/main/java/example/simpleapp/repository/BookRepository.java:9: error: cannot find symbol
public interface BookRepository extends JpaRepository<Book, Long> {
^
symbol: class Book
2 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':repository:compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.4.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 2s
3 actionable tasks: 1 executed, 2 up-to-date
我不明白为什么会出现这样的错误,因为模型包是存在的。希望你们中的一个能给出解决方案。
之前谢谢...
edited:
于 repository/build.gradle
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation project(":model")
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
于 model/build.gradle
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
}
在尝试理解其他类似主题后,我终于可以解决错误。
所以我在 root/build.gradle
上的第一个语法如下
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
implementation project(":main-app")
}
test {
useJUnitPlatform()
}
subprojects {
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
}
然后我通过在 root/build.gradle
和 subprojects/build.gradle
bootJar {
enabled = false
}
jar {
enabled = true
}
根据 https://spring.io/guides/gs/multi-module/ 的指南,该代码用于告诉 Gradle 不要为库项目构建可执行 jar。
我不知道为什么我之前错过了这一步。所以,我最后的 root/build.gradle
看起来像
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
bootJar {
enabled = false
}
jar {
enabled = true
}
repositories {
mavenCentral()
}
dependencies {
implementation project(":main-app")
}
test {
useJUnitPlatform()
}
subprojects {
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
group = 'example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
bootJar {
enabled = false
}
jar {
enabled = true
}
}
然后我更新所有 subproject/build.gradle
,只需添加依赖项标记即可。例如repository/build.gradle
dependencies {
implementation project(":model")
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
这就是我所有的问题解释...:)