gpt4 book ai didi

spring-boot - 当我想我尝试了很多解决方案时,如何在 Kotlin 和 Gradle 项目中使用 DevTools?

转载 作者:行者123 更新时间:2023-12-02 13:07:53 26 4
gpt4 key购买 nike

我想在我的 Spring Boot Web 应用程序中使用 DevTools。我使用 IntelliJ。但它不爱我,它不起作用。我阅读了大量关于这个问题的文档,但可能我没有注意到解决方案。也许你可以帮助我。

我使用 Gradle 和 Kotlin。但我认为这应该不是问题。我尝试了什么:

  1. 在gradle中使用devtools依赖
  2. 设置 -> 构建、执行、部署 -> 编译器 -> 我勾选了“自动构建项目”
  3. Ctrl + Shift + A -> Registry... -> 我检查了'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"
}
}

com.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

所以我不知道是什么问题。开发工具处于事件状态。我试图在 RestController 中更改苹果字符串。然后保存并刷新网页,它没有改变。我非常感谢任何建议。

最佳答案

您引用的设置“自动构建项目”仅适用于 IntelliJ 自己的编译器。如果您将构建委托(delegate)给 Gradle(这是较新版本的 IntelliJ 中的默认设置),它实际上不会自动构建您的项目。

devtools 模块只会在重新编译时重新加载类。因此,只要您准备好重新加载以触发 Gradle 构建,就可以点击“构建项目”按钮。但由于这还将运行单元测试,甚至可能进行静态代码分析(如果您正在使用它),周转时间仍然会相当长。您可以使用 Gradle 手动运行 classes 任务以仅编译类,但手动执行此操作很烦人。

相反,要使用 Gradle 持续编译您的类,仅此而已,请在终端中运行此命令(假设您使用包装器):

gradlew -t 类

它将监视文件系统的变化,并在发生变化时重新运行 classes 任务。因此,无论何时您对源文件进行更改并保存它,Gradle 都会重新编译它并且 devtools 模块应该获取更改并重新加载它。

关于spring-boot - 当我想我尝试了很多解决方案时,如何在 Kotlin 和 Gradle 项目中使用 DevTools?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58013241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com