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