有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法将带有Gradle的单片Spring Boot应用程序转换为多模块

实际上,我有一个带有gradle的单片spring boot应用程序,我想把它转换成多模块。 这只是一个简单的应用程序做积垢书

我的应用程序结构如下所示

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

如果我运行这个项目,它运行得很好,并返回应该返回的结果

但是,当我构建项目时,它会变成这样的错误

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:

关于存储库/构建。格拉德尔

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'
}

关于模型/构建。格拉德尔

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'
}

共 (1) 个答案

  1. # 1 楼答案

    在尝试理解其他类似主题后,我终于可以解决这个错误

    所以我对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.gradlesubprojects/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
        }
    }
    

    然后我通过添加dependencies标签来更新我所有的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'
    }
    

    这就是我所有的问题解释…:)