Spring Boot Gradle quickbuild, который пропускает несущественные - PullRequest
0 голосов
/ 21 января 2019

Java 8 и Gradle 4.6 здесь. У меня есть приложение Spring Boot со следующим build.gradle:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.8.RELEASE")
    }
}

plugins {
    id 'java-library'
    id 'checkstyle'
    id 'jacoco'
}

apply plugin: 'org.springframework.boot'

repositories {
    mavenLocal()
    mavenCentral()
    jcenter()
}

configurations {
    dev
}

dependencies {
    compile(
        ,'ch.qos.logback:logback-classic:1.2.3'
        ,'org.slf4j:jul-to-slf4j:1.7.25'
        ,'org.apache.logging.log4j:log4j-to-slf4j:2.9.1'
        ,'org.apache.commons:commons-lang3:3.7'
        ,'org.springframework.boot:spring-boot-starter-actuator'
        ,'org.apache.commons:commons-text:1.2'
        ,'commons-beanutils:commons-beanutils-core:1.8.3'
    )

    testCompile(
        'junit:junit:4.12'
        ,'org.mockito:mockito-core:2.23.0'
    )

    dev('org.springframework.boot:spring-boot-devtools')

}

sourceCompatibility = 1.8
targetCompatibility = 1.8
String buildName = 'myapp'

jar {
    baseName = buildName
}

bootRun {
    if(project.hasProperty('debugMode')) {
        jvmArgs = [ "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005" ]
    }

    classpath = sourceSets.main.runtimeClasspath + configurations.dev
}

checkstyle {
    toolVersion = '8.12'
    ignoreFailures = false
}

jacocoTestReport {
    reports {
        xml.enabled false
        html.enabled true
        html.destination file("${buildDir}/reports/jacoco/")
    }
}

check.dependsOn jacocoTestCoverageVerification
jacocoTestCoverageVerification.dependsOn jacocoTestReport

Так что это Java-приложение Spring Boot, которое также использует Checkstyle и Jacoco Плагины Gradle.

Я считаю " полная сборка " вызовом, который:

  • компилировать
  • Запускает Checkstyle
  • Запуск юнит-тестов (JUnit)
  • Запускает Jacoco для анализа покрытия кода
  • Использует библиотеки Spring Boot для создания "толстого" (автономного) исполняемого файла jar

Учитывая мой текущий файл сборки Gradle, я запускаю полную сборку так:

./gradlew clean build

Однако это может занять несколько минут, чтобы пройти все юнит-тесты и стало громоздким. Я хотел бы представить Опция " quick build ", которая только компилирует код и создает для меня толстую банку Spring Boot. Это поможет ускорить разработку время потрясающе.

Я надеюсь вызвать быструю сборку следующим образом:

./gradlew clean quickbuild

Пока у меня есть это:

tasks.register("quickbuild") { 
    doLast { 
        // ???
    }
}

Но не уверен, как связать с ним задачи компиляции и fatjar (и, что более важно, пропустить все остальные вещи, которые мне не нужны!). Есть идеи, что мне не хватает?


Обновление

Задача bootJar, кажется, не существует или не настроена (пожалуйста, проверьте мой build.gradle файл, предоставленный выше!):

$ ./gradlew clean bootJar

FAILURE: Build failed with an exception.

* What went wrong:
Task 'bootJar' not found in root project 'myapp'. Some candidates are: 'bootRun'.

* Try:
Run gradlew tasks to get a list of available tasks. 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

BUILD FAILED in 0s

Когда я пытаюсь запустить bootRun:

$ ./gradlew clean bootRun

Он пытается на самом деле запустить мое приложение! Это не то, что я хочу! Я просто хочу скомпилировать и собрать полную флягу!

1 Ответ

0 голосов
/ 21 января 2019

См. Документацию по плагину Java здесь: https://docs.gradle.org/current/userguide/java_plugin.html#lifecycle_tasks

Вы можете создать новое задание (quickbuild) и сделать его зависимым от желаемого задания (в вашем случае это может быть assembleЗадача жизненного цикла, я думаю, или, может быть, задача bootJar (для SpringBoot v2.x) или bootRepackage (для SpringBoot v1.5.x))

tasks.register('quickbuild'){
    dependsOn assemble
}

Но если единственная цель quickbuild задача состоит в том, чтобы вызвать создание Jar, самое простое решение - выполнить assemble напрямую

./gradlew clean assemble
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...