gpt4 book ai didi

java - Gretty、Spring MVC 和热部署

转载 作者:行者123 更新时间:2023-11-29 04:19:07 25 4
gpt4 key购买 nike

我正在学习 Spring MVC 并尝试将其与 Gradle 和 Gretty 插件一起使用。我已经成功创建了一个“Hello World”项目,但是我无法使用 Gretty 进行热部署,尽管设置了 managedClassReload=true。我使用来自 IntelliJ 的 appRun gretty 任务运行应用程序。我的build.gradle如下:

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'war'
apply from: 'https://raw.github.com/gretty-gradle-plugin/gretty/master/pluginScripts/gretty.plugin'

group = 'lukeg'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = 'lukeg.LearnApplication'

repositories {
mavenCentral()
maven {
url 'https://repo.spring.io/libs-snapshot'
}
}


dependencies {
compileOnly('org.projectlombok:lombok:+')
compile('org.springframework:spring-webmvc:4.3.17.RELEASE')
compile("org.aspectj:aspectjweaver:1.8.11")
compile('org.springframework:spring-context:4.3.18.BUILD-SNAPSHOT')
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
}

gretty {
httpPort = 8080
contextPath = '/'
servletContainer = 'tomcat9'
//reloadOnClassChange=true
managedClassReload=true
loggingLevel='DEBUG'
}

对于 servlet 容器,我使用 tomcat9 还是 jetty9 并不重要:日志没有显示 Gretty 检测到项目中源文件的更改。

有趣的是,当我注释掉 managedClassReload=true 行并取消注释 reloadOnClassChange=true 时,会检测到对源文件的更改并自动重新加载项目。

gretty热部署不生效是什么原因? springloaded 不能与 Spring MVC 一起工作吗?

最佳答案

首先,无需依赖您从 github 收集的插件脚本,因为 org.gretty 在官方 Gradle plugin repository 中可用。已经有一段时间了:

plugins {
id "org.gretty" version "2.1.0"
}

因为您正在使用 appRun 就地运行您的应用程序,您的更改将不会重新加载。
您必须使用 appRunWar 将应用程序作为 war 运行.

文档中没有提到这一点。但是在 Gretty 源代码中。
您可以查看Gretty codeBaseScannerManager 中导致您的问题:

if(wconfig.reloadOnClassChange) 
{
if(managedClassReload)
{
if(wconfig.inplace) // <-- your problem, you are running inplace
{
log.info 'file {} is in managed output of {}, servlet-container will not be restarted', f, wconfig.projectPath
}
else
{
log.info 'file {} is in output of {}, but it runs as WAR, servlet-container will be restarted', f, wconfig.projectPath
webAppConfigsToRestart.add(wconfig)
}
}
else
{
log.info 'file {} is in output of {}, servlet-container will be restarted', f, wconfig.projectPath
webAppConfigsToRestart.add(wconfig)
}
}

关于java - Gretty、Spring MVC 和热部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50381193/

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