Не удалось преобразовать приложение Monolithi c Spring Boot с Gradle в мульти-модуль - PullRequest
0 голосов
/ 16 июня 2020

На самом деле у меня есть приложение монолитной c весенней загрузки с gradle, и я хочу преобразовать его в мульти-модуль. Это простое приложение для создания 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

, если я запускаю проект, он работает нормально и возвращает результат, который должен быть возвращен.

Но когда я создаю проект, он превращается в ошибку, подобную этой .

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:

в репозитории / 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'
}

в модели / 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'
}

1 Ответ

0 голосов
/ 17 июня 2020

Я, наконец, могу решить ошибку, после попытки понять другие похожие топи c.

Итак, мой первый синтаксис для 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'
}

Вот и все объяснение моей проблемы ... :)

...