我有一个Spring Web应用程序,当我在Tomcat中使用IDEA的debbuger调试并在一些更改后重新部署项目时,不会部署更改,调试器会看到"旧代码(通过错误或空行)。唯一有帮助的是运行maven clean install然后再次启动Tomcat。
我尝试清除IDEA缓存,但它没有帮助。
Hotswap也不起作用,虽然我在设置中选择了正确的选项,但我可以忍受。
请注意,我使用的是redeploy而不是hotswap,所以整个应用程序再次启动,它应该重新加载所有类,但它没有。只有在maven构建之后才有效。
注意2:我认为一个月前它可以正常工作,但我认为没有任何改变可以做到这一点(项目或IDEA明智)
编辑:所以hotswap现在正常工作(神奇地,我没有做任何事情)。但是当我进行更大的修改(例如,方法签名更改等)时,它们在REDEPLOY到服务器期间不会被拾取。所以我需要运行maven clean install并再次启动服务器以查看更改并使hotswap在对此新代码进行方法体修改后正常工作。知道为什么吗?答案 0 :(得分:3)
您需要检查tomcat的运行配置,在"启动之前"应该有Make和Build工件步骤,同时确保所有更改过的类在重新部署期间都在编译 - 这是我要开始的地方。
另外,我不明白为什么你使用重新部署而不是热插拔?重新部署通常与重启服务器相同,但热插拔几乎是即时的。虽然它只允许更改方法体和常量,但通常它在预期中可以很容易地进行重新部署。就个人而言,我现在使用的是非商业项目免费的JRebel,并且非常罕见地重启服务器。
修改强> 我不知道为什么你的课程在重新部署之后仍旧,但原因是99%他们在更改为爆炸文件夹后无法编译。在每次代码更改后进行maven clean install太多(IDE编译应该足够了)。
我建议您不要重新部署,而是在重大更改后重新启动服务器。这样IDE就可以执行Make,Build工件和部署工件任务。
答案 1 :(得分:1)
除了david.lucky提示之外,请确保在部署部分的Tomcat配置中使用爆炸工件
答案 2 :(得分:0)
我有完全相同的问题!我花了好几个小时来解决这个问题。
我不知道为什么,但我的解决方案是(我在MacOS High Sierra工作):
首先,我有一些我正在研究的教程项目,在我的桌面上的文件夹/ Desktop / tutorial / ...这些项目工作正常。我可以重新部署,Tomcat正在识别我的java文件中的更改。
然后我开始了一些新的自己的项目,并将它们放在我的主目录中,例如/ Users / myHomeDirectory / WebApps /。 我可以构建并运行这些对象,但是当我进行更改时,我遇到了同样的问题,Tomcat没有认识到结果。当我点击Maven-Button" Reimport all Maven Projects"时,唯一有帮助的事情。
我尝试了很多不同的东西。没有任何效果。
然后我想,也许,我的项目有问题。所以我从Desktop获取了一个项目并将它们复制到我的主目录中。但突然间,我又遇到了同样的问题。
所以这是我的解决方案:我再次在桌面上创建了一个新项目。我不知道为什么,但现在它工作正常。我真的不知道为什么。相信我,我没有改变任何设置。我做的完全一样!
<小时/> 关于没有重新部署的生活重装。这对我来说非常好(没有像JREbel这样的插件):
选择“服务器”选项卡,更新以下选项:
在调试模式下运行Web应用程序。尝试修改一些代码或资源(Java文件,...),修改后的类和资源将自动重新加载。
答案 3 :(得分:0)
几个月前从eclipse切换到Intellij之后,Ultimate Edition出现了一段时间。 使用上面提到的标准tomcat配置和调试设置。
Intellij将在没有要重新加载或重新加载一个类之后显示绿色弹出窗口。 但是调试器的字节码与重新加载/更新的代码不同。
您可以强制进行重新编译,该更改将适用于较小的更改ctr shift F9
。
除此之外,全新安装似乎可用于注释,方法定义更改等。如果尝试重新编译,调试器将使服务器失败。
因此,答案是ctrl shift F9
在您更改的文件上