Как может работать DevTools в проектах Kotlin и Gradle, когда, я думаю, я испробовал много решений? - PullRequest
1 голос
/ 19 сентября 2019

Я хотел бы использовать DevTools в своем веб-приложении Spring Boot.Я использую IntelliJ для этого.Но он не любит меня и не работает.Я прочитал много документации по этой проблеме, но, вероятно, решение ускользнуло от моего внимания.Может быть, вы можете мне помочь.

Я использую Gradle и Kotlin.Но я думаю, что это не должно быть проблемой.То, что я пробовал:

  1. Я использовать зависимость devtools в Gradle
  2. В Настройки -> Построение, Выполнение, Развертывание -> Компилятор -> Я проверилв 'Создать проект автоматически'
  3. Ctrl + Shift + A -> Реестр ... -> Я проверял 'compiler.automake.allow.when.app.running '
  4. В моем браузере (Chrome) я нажал F12 -> Сеть -> Я зарегистрировал ' Отключить кэш '
  5. Я отключил AdBlocker

Вот мое демо:

build.gradle.kts

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.1.8.RELEASE"
    id("io.spring.dependency-management") version "1.0.8.RELEASE"
    kotlin("jvm") version "1.2.71"
    kotlin("plugin.spring") version "1.2.71"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

val developmentOnly by configurations.creating
configurations {
    runtimeClasspath {
        extendsFrom(developmentOnly)
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

ком.excample.demo.controller.RestController.kt

package com.example.demo.controller

import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class RestController {

    @RequestMapping("/testDevTools")
    public fun testDev(): String? {
        return "apple"
    }
}

com.excample.demo.DemoApplication.kt

package com.example.demo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    runApplication<DemoApplication>(*args)
}

И когдаЯ запускаю приложение:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.8.RELEASE)

2019-09-19 15:59:15.727  INFO 6672 --- [  restartedMain] com.example.demo.DemoApplicationKt       : Starting DemoApplicationKt on DESKTOP-QRT95S2 with PID 6672 (started by Baráth Péter in C:\Users\Baráth Péter\OneDrive - Sonrisa Kft\Projects\Demos\devToolsDemo)
2019-09-19 15:59:15.731  INFO 6672 --- [  restartedMain] com.example.demo.DemoApplicationKt       : No active profile set, falling back to default profiles: default
2019-09-19 15:59:15.890  INFO 6672 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2019-09-19 15:59:15.890  INFO 6672 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2019-09-19 15:59:19.376  INFO 6672 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 9090 (http)
2019-09-19 15:59:19.430  INFO 6672 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-09-19 15:59:19.431  INFO 6672 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.24]
2019-09-19 15:59:19.666  INFO 6672 --- [  restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-09-19 15:59:19.666  INFO 6672 --- [  restartedMain] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3776 ms
2019-09-19 15:59:20.205  INFO 6672 --- [  restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-09-19 15:59:20.878  WARN 6672 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : Unable to start LiveReload server
2019-09-19 15:59:21.004  INFO 6672 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path ''
2019-09-19 15:59:21.018  INFO 6672 --- [  restartedMain] com.example.demo.DemoApplicationKt       : Started DemoApplicationKt in 6.16 seconds (JVM running for 7.234)
2019-09-19 15:59:45.492  INFO 6672 --- [nio-9090-exec-3] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-09-19 15:59:45.493  INFO 6672 --- [nio-9090-exec-3] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-09-19 15:59:45.502  INFO 6672 --- [nio-9090-exec-3] o.s.web.servlet.DispatcherServlet        : Completed initialization in 9 ms

Содержит эту строку:

2019-09-19 15:59:15.890  INFO 6672 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable

Так что я не знаю, в чем проблема.Devtools активен.Я пытался изменить строку Apple в RestController.Затем сохраните и обновите веб-страницу, и она не изменилась.Я очень благодарен за любой совет.

1 Ответ

2 голосов
/ 19 сентября 2019

Параметр «Автоматически создавать проект», на который вы ссылаетесь, применяется только к собственному компилятору IntelliJ.Если вы делегируете свою сборку в Gradle, который используется по умолчанию в более новых версиях IntelliJ, он фактически не автоматически создаст ваш проект.

Модуль devtools перезагрузит классы только при перекомпиляции.Таким образом, вы можете нажать кнопку «Build Project», когда будете готовы к перезагрузке, чтобы запустить сборку с помощью Gradle.Но так как при этом также будут выполняться модульные тесты и, возможно, даже статический анализ кода (если вы его используете), время оборота все равно будет довольно высоким.Вы можете вручную запустить задачу classes с Gradle, чтобы скомпилировать только классы, но делать это вручную раздражает.

Вместо этого, чтобы постоянно компилировать ваши классы с помощью Gradle, и только это, запустите эту команду в терминале (при условии, что вы используете оболочку):

gradlew -t classes

Она будет отслеживать файловую систему на предмет изменений и повторно запускать задачу classes на изменениях.Поэтому, когда вы вносите изменения в исходный файл и сохраняете его, Gradle перекомпилирует его, и модуль devtools должен получить это изменение и перезагрузить его.

...