Java IntelliJ IDEA没有';t重新部署更改
我有一个SpringWeb应用程序,当我在Tomcat中使用IDEA的debbuger进行调试并在一些更改后重新部署项目时,这些更改不会被部署,调试器会“看到”旧代码(通过错误或空行)。唯一有帮助的是运行maven clean install,然后再次启动Tomcat 我试着清除想法的秘密,但没用 热交换也不起作用,虽然我在“设置”中选择了正确的选项,但我可以接受 请注意,我使用的是重新部署而不是热交换,因此整个应用程序将再次启动,它应该重新加载所有类,但不会。只有在maven构建之后,它才能工作 注2:我认为一个月前它还可以工作,但我想不出任何改变可以做到这一点(项目或想法方面)Java IntelliJ IDEA没有';t重新部署更改,java,maven,tomcat,intellij-idea,Java,Maven,Tomcat,Intellij Idea,我有一个SpringWeb应用程序,当我在Tomcat中使用IDEA的debbuger进行调试并在一些更改后重新部署项目时,这些更改不会被部署,调试器会“看到”旧代码(通过错误或空行)。唯一有帮助的是运行maven clean install,然后再次启动Tomcat 我试着清除想法的秘密,但没用 热交换也不起作用,虽然我在“设置”中选择了正确的选项,但我可以接受 请注意,我使用的是重新部署而不是热交换,因此整个应用程序将再次启动,它应该重新加载所有类,但不会。只有在maven构建之后,它才能工
编辑:所以热交换现在工作正常(神奇的是,我什么都没做)。但是,当我进行更大的修改(例如,方法签名更改等)时,它们在重新部署到服务器时不会被拾取。因此,我需要运行maven clean install并再次启动服务器,以查看更改,并在对新代码进行方法体修改后使hotswap正常工作。知道为什么吗?您需要检查tomcat的运行配置,在“启动前”中应该有生成和构建工件的步骤,还要确保所有更改的类都是在重新部署过程中编译的-这是我的起点 我也不明白你为什么用重新部署而不是热插拔?重新部署通常和重启服务器一样耗时,但热插拔几乎是即时的。虽然它只允许更改方法体和常量,但通常在开发中重新部署时会更容易。就我个人而言,我现在使用的JRebel对非商业项目是免费的,很少重启服务器 编辑: 我不知道为什么即使在重新部署之后,您的类仍然很旧,但原因是99%的类在更改到分解文件夹后不会编译。在每次代码更改后执行maven clean安装太多(IDE编译应该足够了)
我建议您不要重新部署,而是在发生重大更改后重新启动服务器。这样IDE就可以执行生成、构建工件和部署工件任务。除了david.lucky提示之外,请确保在部署部分的Tomcat配置中,您使用的是一个分解工件我遇到了完全相同的问题!我花了几个小时来解决这个问题 我不知道为什么,但我的解决方案是(我正在研究MacOS High Sierra):
- 首先,我在桌面上的/Desktop/tutorial/文件夹中有一些我正在做的教程项目。。。这些项目运作良好。我可以重新部署,Tomcat可以识别java文件中的更改
- 然后我开始了一些新的、自己的项目,并将它们放在我的主目录中,比如/Users/myhomeditory/WebApps/。 我可以构建和运行这些对象,但当我进行更改时,我遇到了同样的问题,即Tomcat无法识别结果。唯一有帮助的是,当我点击Maven按钮“重新导入所有Maven项目”时
- 我尝试了很多不同的东西。什么都没用
- 然后我想,也许我的项目出了问题。所以我从桌面上取了一个项目,并将它们复制到我的主目录中。但突然,我又遇到了同样的问题
- 所以我的解决方案是:我再次在桌面上创建了一个新项目。我不知道为什么,但现在它工作得很好。我真的不知道为什么。相信我,我没有改变任何设置。我也这么做了
以及在不重新部署的情况下重新加载生命。这对我来说非常好(没有像JREbel这样的插件):
- 运行–>编辑配置–>“部署”选项卡,单击+图标–>选择“分解的工件”
- 选择“服务器”选项卡,更新以下选项:
- 在“更新”操作->更新类和资源上
- 帧上停用->更新类和资源
- 在调试模式下运行web应用程序。尝试修改一些代码或资源(Java文件,…),修改后的类和资源将自动重新加载
ctr shift F9
。
除此之外,干净的安装似乎适用于注释、方法定义更改等。如果尝试重新编译,调试器将使服务器失败
因此,答案是在“发射前”中更改的文件上
ctrl-shift F9
,我有“Make”和“Buld-exploded-war-artifact”。正如我所说,热交换也不起作用,它说它正在编译类,然后显示“所有文件都是最新的”,但调试器仍然忽略了更改(即使它们在方法体中)。在设置中的调试器->热交换部分有什么内容?应该有3个单选按钮,您应该将“编译后重新加载类”设置为“始终”或“询问”。还需要明确的是:您需要在调试模式下运行tomcat,或者使用远程调试器连接到它。即使热交换不起作用,也应该重新部署。我还可以很好地调试代码,但是修改需要经过maven build,调试器才能看到它们。我正在使用本地tomcat,为什么我需要使用远程?还有一件事:它在一个月前还可以正常工作。请查看答案。我看到了这个答案,我有完全相同的设置。你能发布运行/调试配置的屏幕截图吗?还有,什么版本的