2015-01-09 99 views
2

我有一个Spring Web应用程序,当我在Tomcat中使用IDEA的debbuger进行调试并在一些更改后重新部署项目时,更改未部署,调试器“看到”旧代码或空行)。唯一有用的是运行maven clean install,然后再次启动Tomcat。IntelliJ IDEA不重新部署更改

我尝试清除IDEA缓存但它没有帮助。

热交换也不起作用,虽然我在设置中选择了正确的选项,但我可以忍受。

请注意,我使用redeploy而不是热交换,因此整个应用程序再次启动,它应该重新加载所有类,但它不会。只有在Maven构建它之后才有效。

注2:我觉得好的工作一个月前,但没有改变我能想到的可以做到这一点(项目或IDEA明智)

编辑:所以热插拔现在工作正常(神奇,我没有做任何事情)。但是,当我做出更大的修改(例如方法签名更改等)时,在重新装载到服务器期间不会收到它们。所以我需要运行maven clean install并再次启动服务器以查看更改并在此新代码的方法体修改之后使热插拔正常工作。任何想法为什么?

+0

请参阅答案[的IntelliJ和Tomcat ...更改的文件不会自动认可Tomcat](http://stackoverflow.com/questions/19596779/intellij-and-tomcat-changed-files-are-not-automatically-recognized-by-tomcat/19609115) – Javaru

+0

我见过这个答案,我有完全相同的设置。 – redhead

+0

你可以发布你的运行/调试配置的屏幕截图吗?此外,你正在使用什么版本的东西?即IntelliJ IDEA,Tomcat,Java,Spring。我只是重试了一个简单的webapp项目,并按预期工作。 – Javaru

回答

3

你需要检查你的tomcat的运行配置,在“启动之前”应该有Make和Build神器的步骤,也要确保你所有改变的类在重新部署期间真的编译 - 这是我将从。

另外我不明白你为什么使用重新部署而不是热插拔?重新部署通常与重新启动服务器同样耗时,但热插拔几乎是即时的。虽然它只允许改变方法体和常量,但通常它是可预测的,然后重新部署在开发中。就我个人而言,我正在使用现在免费用于非商业项目的JRebel,并且很少重新启动服务器。

编辑: 我不知道为什么你的类甚至重新部署后都老了,但原因是99%,他们不变成爆炸文件夹后,编译。在每次代码更改后做maven干净安装太多(IDE编译应该足够了)。

我可以建议你不要重新部署,而是在重大更改后重新启动服务器。以便IDE执行Make,Build artifact和Deploy artifact任务。

+0

在“发射之前”我有'Make'以及'Buld爆炸战争神器'。正如我所说的,hotswap也不起作用,它说它正在编译类,然后它显示'所有文件都是最新的',但调试器仍然错过了更改(即使它们在方法体中)。 – redhead

+0

你在调试器 - >设置中的HotSwap部分有什么?应该有3个单选按钮,您应该将'编译后重新加载类'设置为“始终”或“询问”。还有一点要清楚:你需要在调试模式下运行tomcat,或者用远程调试器连接它。 –

+0

我确实有“永远”。即使热交换不起作用,也应该重新部署。我也可以调试代码,但是需要通过Maven构建调试器才能看到它们。我正在使用本地tomcat,为什么我需要使用远程?还有一件事:一个月前它确实工作得很好。 – redhead

1

除了david.lucky提示,确保在部署一节的Tomcat配置您正在使用的分解神器