Idea调试热更新那些事

用惯了Eclipse,对于eclipse的调试过程中HotSwap生效感觉很爽,更换为IDEA后,总觉得别扭得很,非要手动触发“Recompile '*.java'"这个才能生效。最开始老是感觉我哪里理解不到位,或者我的环境配置哪里有问题,反正就是一顿感觉不爽。总想实现类似Eclipse中的效果,但是一直求而不得,只能反复试验,反复求证。

目标:

希望在IntelliJ IDEA中在调试过程中对类代码的修改、能够自动编译、加载以及HotSwap立即生效,再在方法中通过“Reset Frame"的方式来马上看到修改后的效果。

1.环境:

IntelliJ IDEA 2023.3.6 (Community Edition)

JDK使用“Java 17.0.7”

Mac

2.配置:

1)开启自动编译: 打开 [Settings]。 转到 [Build, Execution, Deployment] -> [Compiler]。 勾选 'Build project automatically'。

2)配置HotSwap: 在 [Build, Execution, Deployment] -> [Debugger] -> [HotSwap] 下, 勾选 'Build project before reloading classes'。 选择 'Reload classes after compilation: 'Always'。

3)允许在应用运行时开始自动编译: 在 [Settings 中转到 [Advanced Settings] -> [Compiler]。 勾选 'Allow auto-make to start even if developed application is currently running'。

4)项目编译输出路径设置: 在 [Project Structure] -> [Project Settings] -> [Modules] -> [Paths] 中查看,默认是项目的根路径下的“target/classes”。

3.结果:

1)在调试过程中,修改了类代码,可以在工程的“target/classes”下面的对应包目录看到类被自动编译了,但是不能被自动加载,HotSwap也不能自动生效,点击菜单[Run][Debugging Actions][Reload changed classes] 提示“Loaded classes are up to date. Nothing to reload”.

2)在调试过程中,修改了类代码,在菜单[Build]中点击“Recompile 'xxx.java'"后,可以在工程的“target/classes” 下面的对应包目录看到类被自动编译了,可以被自动加载并且HotSwap也立即生效了,从当前断点处点击“Reset Frame"后,修改后的代码马上生效。

4.原因分析:

在IntelliJ IDEA中,只有当您手动点击Build -> Recompile '.java'或使用相应的快捷键来编译选定的Java文件时,IDE才会尝试使用HotSwap机制来加载这些新编译的类到正在运行的JVM中。这个过程允许您在调试时即时看到代码更改的效果。

自动编译功能虽然也会更新target/classes目录下的类文件,但它不会自动触发HotSwap过程。自动编译主要是为了在开发过程中提供即时的编译错误反馈,而不是为了在运行时更新类定义。因此,如果想要在调试过程中实现代码的热替换(HotSwap),需要通过手动编译的方式来触发这一过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

根据生辰八字四柱命理测算童子命童子煞算法

#小李子9479# #不讲废话# 真童子命算法口诀: 1。春秋寅子贵 //命造生在春季或秋季的(以月令算),日支或时支见寅或子的2。冬夏卯未辰 //命造生在冬季或夏季的(以月令算),日支或时支见卯、未或辰的3。金木马卯和 //年柱纳音为金或木的,日支或时支见午或卯的4。水火遇鸡…

多域名单点登录信息未同步问题

一个网站有多个域名,其中四个域名指向的是同一个页面,另外还有一个地址指向前面页面里面的某个功能。 https://www.xxx.cn/ https://xxx.cn/ https://www.xxx.com.cn/ https://xxx.com.cn/ xxx.com.cn网站下某个功能跳转到https://ab.xxx.com.cn/在ab.x…

QT6 Android设置程序图标及名称

一.APP应用图标设置 1.在工程目录中,创建一个Android_sources文件夹,在build-XXX

Centos7 安装GitLab

安装环境: 虚拟机:Centos7 最小安装 4核8G 下载GitLab 本次实验下载的是 gitlab-ce-14.1.0-ce.0.el7.x86_64.rpm 官网截图 清华源截图 安装包下载地址(官网;下载CE版本,EE是收费版本):https://packages.gitlab.com/gitlab/gitlab-ce国内镜像源下载地址(清华源):htt…

Linux函数学习 fork

1、Linux fork 函数 pid_t fork(void); pid_t : 对于子进程,返回0 pid_t : 对于父进程进程,返回子进程进程号 int pipe(int pipefd[2]); pipefd[0] 为读取管道 pipefd[1] 为写入管道 返回值:-1失败 0 成功 2、函…

Leetcode面试经典150_Q26删除有序数组中的重复项

题目: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量…

MongoDB聚合运算符:$map

文章目录 语法举例对数组元素取整将摄氏度转为华氏度 $map聚合运算符将指定的表达式应用于数组元素&#xff0c;对数组每个元素进行计算并返回计算后的数组。 语法 { $map: { input: <expression>, as: <string>, in: <expression> } }参数说明&#xff1a…

springboot实现上传文件接口(简单版)

使用springboot实现一个最简单版本的上传文件接口 private String uploadPath "C:/imageFiles";RequestMapping(value "/upload", method RequestMethod.POST)private Result upload( RequestParam("modelName") String modelName,RequestPar…

HTML5+CSS3+JS小实例:圣诞按钮

实例:圣诞按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…

【4月最新】低至50/年,4G 618/3年 云服务器价格即将回调 ,搭建网站 博客 Linux练习 比虚拟机方便 附阿里云 京东云 腾讯云对比表

更新日期&#xff1a;4月8日&#xff08;半年档 价格回调&#xff0c;京东云采购季持续进行&#xff09; 本文纯原创&#xff0c;侵权必究 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更…

CorelDRAW2024全网最详细独家讲解新版本新功能

各位粉丝大家好&#xff0c;为了让大家更深入的了解CorelDRAW2024新版的各项新功能&#xff0c;我们独家邀请到了Corel中国专家名师张苏老师&#xff0c;策划并录制30分钟全中文讲解栏目&#xff01;干货满满&#xff0c;全程演示&#xff0c;一览CorelDRAW2024新版的各项新功能…

Vue中使用require.context()自动引入组件和自动生成路由的方法介绍

目录 一、自动引入组件 1、语法 2、使用 2.1、在compoents文件下随便创建index.js文件 2.2、mian.js引入该js 二、自动生成路由 1、示例&#xff1a; 2、使用 2.1、在router文件下随便创建autoRouter.js文件 2.2、在router文件下index.js文件中引入autoRouter.js文件…

rabbitmq的介绍和交换机类型

rabbitmq的介绍和交换机类型 1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系…

数仓调优实战:GUC参数调优

1. 前言 适用版本&#xff1a;【8.1.1及以上】 GaussDB(DWS)性能调优系列专题文章&#xff0c;介绍了数据库性能调优的思路和总体策略。在系统级调优中数据库全局的GUC参数对整体性能的提升至关重要&#xff0c;而在语句级调优中GUC参数可以调整估算模型&#xff0c;选择查询…

Nacos漏洞知多少?

1.什么是Nacos 1.1 官方解答 Nacos是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助…

深度学习学习日记4.8(下午)

1.softmax 函数的得出的结果是样本被预测到每个类别的概率&#xff0c;所有类别的概率相加总和等于1。使用 softmax 进行数据归一化&#xff0c;将数字转换成概率。 2.熵&#xff0c;不确定性&#xff0c;越低越好 3.KL 散度交叉熵-信息熵 预测越准&#xff0c;交叉熵越小&am…

高维解码|Redis 收紧许可证!开源软件公司如何在云时代生存?

最近&#xff0c;Redis 从开放源代码的 BSD 许可证过渡到了更加限制性的 Server Side Public License (SSPLv1)。一石激起千层浪&#xff0c;Redis 的这一举动&#xff0c;不仅分化了前 Redis 维护者&#xff0c;也再次引发业界对于“开源项目可持续性以及许可证决策对其社区的…

Python MNIST 转图片

Python MNIST 转图片 1 获取数据2 显示图片3 转换图片4 全部代码 1 获取数据 import numpy as np import tensorflow as tf from tensorflow.keras import datasets # type: ignoredef save(mnist_path):# 输出TensorFlow版本print("TensorFlow: {0}".format(tf.__v…

iOS 开发中上传 IPA 文件的方法(无需 Mac 电脑

引言 在 iOS 开发中&#xff0c;将 IPA 文件上传到苹果开发者中心是一个重要的步骤。通常情况下&#xff0c;我们需要使用 Mac 电脑上的 Xcode 或 Application Loader 工具来完成这个任务。然而&#xff0c;如果你没有 Mac 电脑&#xff0c;也没有关系&#xff0c;本文将介绍一…

Cassandra - A Decentralized Structured Storage System——论文阅读

SIGOPS 2010 Paper 分布式元数据论文阅读笔记整理 问题 Facebook生产环境中&#xff0c;在大量基础设施&#xff08;数千个组件&#xff09;上运行的分布式存储系统可能面临各种故障&#xff0c;因此&#xff0c;软件系统需要以一种将故障视为规范而非例外的方式进行构建&…