Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IntelliJ IDEA没有';t重新部署更改_Java_Maven_Tomcat_Intellij Idea - Fatal编程技术网

Java IntelliJ IDEA没有';t重新部署更改

Java IntelliJ IDEA没有';t重新部署更改,java,maven,tomcat,intellij-idea,Java,Maven,Tomcat,Intellij Idea,我有一个SpringWeb应用程序,当我在Tomcat中使用IDEA的debbuger进行调试并在一些更改后重新部署项目时,这些更改不会被部署,调试器会“看到”旧代码(通过错误或空行)。唯一有帮助的是运行maven clean install,然后再次启动Tomcat 我试着清除想法的秘密,但没用 热交换也不起作用,虽然我在“设置”中选择了正确的选项,但我可以接受 请注意,我使用的是重新部署而不是热交换,因此整个应用程序将再次启动,它应该重新加载所有类,但不会。只有在maven构建之后,它才能工

我有一个SpringWeb应用程序,当我在Tomcat中使用IDEA的debbuger进行调试并在一些更改后重新部署项目时,这些更改不会被部署,调试器会“看到”旧代码(通过错误或空行)。唯一有帮助的是运行maven clean install,然后再次启动Tomcat

我试着清除想法的秘密,但没用

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

请注意,我使用的是重新部署而不是热交换,因此整个应用程序将再次启动,它应该重新加载所有类,但不会。只有在maven构建之后,它才能工作

注2:我认为一个月前它还可以工作,但我想不出任何改变可以做到这一点(项目或想法方面)


编辑:所以热交换现在工作正常(神奇的是,我什么都没做)。但是,当我进行更大的修改(例如,方法签名更改等)时,它们在重新部署到服务器时不会被拾取。因此,我需要运行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文件,…),修改后的类和资源将自动重新加载


在几个月前从eclipse切换到Intellij之后,这种情况已经持续了一段时间。 使用上面提到的标准tomcat配置和调试设置

Intellij将在不需要重新加载或重新加载一个类后显示绿色弹出窗口。 然而,调试器字节码不是相同的重新加载/更新代码

您可以强制重新编译,这将适用于小的更改
ctr shift F9
。 除此之外,干净的安装似乎适用于注释、方法定义更改等。如果尝试重新编译,调试器将使服务器失败


因此,答案是在“发射前”中更改的文件上
ctrl-shift F9
,我有“Make”和“Buld-exploded-war-artifact”。正如我所说,热交换也不起作用,它说它正在编译类,然后显示“所有文件都是最新的”,但调试器仍然忽略了更改(即使它们在方法体中)。在设置中的调试器->热交换部分有什么内容?应该有3个单选按钮,您应该将“编译后重新加载类”设置为“始终”或“询问”。还需要明确的是:您需要在调试模式下运行tomcat,或者使用远程调试器连接到它。即使热交换不起作用,也应该重新部署。我还可以很好地调试代码,但是修改需要经过maven build,调试器才能看到它们。我正在使用本地tomcat,为什么我需要使用远程?还有一件事:它在一个月前还可以正常工作。请查看答案。我看到了这个答案,我有完全相同的设置。你能发布运行/调试配置的屏幕截图吗?还有,什么版本的