#java #spring-boot #gradle
#java #весенняя загрузка #gradle
Вопрос:
У меня есть многомодульный проект spring boot. Корневой проект — это «Книжный магазин», а дочерний модуль — «api». Я пытаюсь использовать в «api» классы из «книжного магазина». Но у меня ошибка:
Возникла проблема при оценке проекта ‘: api’. Проект с путем ‘:BookStore’ не удалось найти в project ‘:api’.
Мои корневые настройки.gradle:
pluginManagement {
plugins {
id 'org.springframework.boot' version "2.3.3.RELEASE"
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
}
}
rootProject.name = 'BookStore'
include 'api'
build.gradle корня:
plugins {
id 'org.springframework.boot'
id 'io.spring.dependency-management'
id 'java'
id 'idea'
}
allprojects {
group = 'com.aleksandr'
version = '1.0-SNAPSHOT'
description = 'BookStore'
}
subprojects {
repositories {
mavenCentral()
}
apply {
plugin("io.spring.dependency-management")
}
}
java.sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
mavenLocal()
maven {
url = uri('https://repo.maven.apache.org/maven2/')
}
}
dependencies {
implementation project(':api')
}
И build.gradle дочернего модуля:
plugins {
id 'org.springframework.boot'
id 'io.spring.dependency-management'
id 'java'
id 'idea'
}
repositories {
mavenCentral()
maven {
url = uri('https://repo.maven.apache.org/maven2/')
}
}
dependencies {
compile project(":BookStore")
implementation 'org.springframework.boot:spring-boot-starter-web'
}
Что я делаю не так? Как я могу получить классы из корневого модуля?
Ответ №1:
Если вам нужно создать зависимость от подпроекта (здесь , api
) к RootProject, вы должны использовать одну из следующих обозначений зависимостей:
дочерний модуль build.gradle
dependencies {
api(project(":")) // ":" is the identifier for the rootProject
// OR
api(rootProject) // "rootProject" varible points to the root Project instance.
}
Но в вашем примере есть еще одна проблема: вы создаете цикл зависимостей между RootProject и api
subproject, что недопустимо.
IMO, ваш api
подпроект не должен зависеть от корневого проекта.
Комментарии:
1. Итак, есть ли проблема с архитектурой?
2. да, похоже на то. Я предполагаю, что ваш корневой проект, «BookStore», является основным проектом приложения, содержащим класс точки входа @SpringBootApplication; этот проект «потребляет» подпроекты, например
api
. но почему он долженapi
зависеть от этого основного проекта приложения?? я думаю, здесь что-то не так