Справочная информация:
В настоящее время у меня есть мультимодульное (мультипроектное) хранилище приложений. «Корень» - это , а не работоспособное приложение. Это просто исходный каталог, в котором у меня есть корневой build.gradle.kts
файл, в котором содержатся зависимости и плагины, которые являются общими для всех моих подпроектов. Каждый из моих подпроектов имеет свои собственные build.gradle.kts
.
Так что моя общая структура проекта выглядит примерно так:
my_root_project
- gradle
- wrapper
- gradle-wrapper.jar
- gradle-wrapper.properties
- gradle.build.kts
- settings.gradle.kts
- my_nested_project_a
- src
- main
- kotlin
- my_nested_project_b
...
Проблема:
Каждый раз, когда я запускаю gradle build
, я получаю сообщение об ошибке:
> Task :bootJar FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':bootJar'.
> Main class name has not been configured and it could not be resolved
Однако, когда я запускаю любой из моих подпроектов (например, build :my_nested_project_a:build
), он просто отлично собирается.
Текущие файлы сборки Gradle
Вот что у меня сейчас есть в «корне» gradle.build.kts
:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
group = "com.example"
version = "1.0.0"
java.sourceCompatibility = JavaVersion.VERSION_1_8
java.targetCompatibility = JavaVersion.VERSION_1_8
plugins {
id("org.springframework.boot") version "2.1.8.RELEASE" apply false
id("io.spring.dependency-management") version "1.0.8.RELEASE" apply false
kotlin("jvm") version "1.3.50"
kotlin("plugin.spring") version "1.3.50"
kotlin("plugin.jpa") version "1.3.50"
kotlin("plugin.allopen") version "1.3.50"
}
allprojects {
repositories {
maven(url = "https://my.company.com/repo/with/all/the/stuff/I/need")
}
apply(plugin = "org.jetbrains.kotlin.jvm")
apply(plugin = "java")
apply(plugin = "org.springframework.boot")
apply(plugin = "io.spring.dependency-management")
apply(plugin = "org.jetbrains.kotlin.plugin.spring")
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
}
ПРИМЕЧАНИЕ: IЯ использую apply false
в моих плагинах, потому что я думал, что это не даст Gradle попытаться найти основной класс при сборке с использованием gradle build
.
Что я пытаюсь сделать:
У меня есть конвейер CI, который я хотел бы просто запустить gradle build
, который должен запустить задачу build
для всех подпроектов. Однако в этом процессе я хотел бы игнорировать запуск сборки для «корневого» проекта или обходить его, поскольку это не работоспособное приложение, а просто создавать подпроекты.
Любая помощь будет очень полезнойоценили! :)