Как игнорировать сборку корневого проекта Gradle для многопроектного приложения Kotlin Spring Boot? - PullRequest
0 голосов
/ 07 октября 2019

Справочная информация:

В настоящее время у меня есть мультимодульное (мультипроектное) хранилище приложений. «Корень» - это , а не работоспособное приложение. Это просто исходный каталог, в котором у меня есть корневой 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 для всех подпроектов. Однако в этом процессе я хотел бы игнорировать запуск сборки для «корневого» проекта или обходить его, поскольку это не работоспособное приложение, а просто создавать подпроекты.

Любая помощь будет очень полезнойоценили! :)

1 Ответ

0 голосов
/ 07 октября 2019

Если вы хотите игнорировать задачу bootJar, добавьте следующую конфигурацию.

bootJar {
    enabled = false
}
...