您的位置:

Idea热部署不生效

一、项目配置问题

1、检查项目配置

首先,检查Idea中项目的配置,确保HotSwap Agent插件已经被启用,在项目配置中可在“Build、Execution、Deployment”下的“Compiler”中“Build process heap size”选项中勾选“Configure HotSwapAgent”。如果该插件未启用,重新启用该插件即可。

    
<dependency>
    <groupId>org.hotswapagent</groupId>
    <artifactId>hotswap-agent-core</artifactId>
    <version>1.4.0</version>
</dependency>
    

2、修改项目配置

如果项目已正确配置HotSwap Agent插件而热部署仍不能生效,尝试在“Build、Execution、Deployment”下的“Compiler”中修改“Ensure bytecode consistency”选项,将其更改为“On ‘Update’ action”。

二、代码问题

1、避免使用不支持热部署的代码

如果有些代码在HotSwap Agent中是不支持热部署的,例如添加或删除方法,添加或删除枚举值,修改类的父类等等。当进行这些操作时,需要重新启动应用程序才能生效。

    
public class MessageUtil {
 
    public static String getMessage() {
        return "Hello World!";
    }
 
    // 添加一个新的方法
    public static void newMethod() {
        System.out.println("new method");
    }
}
    

2、注意代码变更

在进行代码修改时,应该确保代码变更已被编译和发布。如果代码变更未被正确发布,代码修改将不会被应用程序识别。

    
if (a == 0) {
    System.out.println("a is zero");
} else {
    // 修改下面这行代码
    System.out.println("a is non-zero");
}
    

3、重载方法

当方法被重载时,HotSwap Agent可能会遇到问题并无法重新加载代码。在这种情况下,尝试重启应用程序或添加“-XX: +UnlockExperimentalVMOptions -XX: +EnableJVMCI -XX: +EnableJVMCIProduct”启动参数以解决问题。

    
public class MessageUtil {
 
    // 重载方法
    public static String getMessage() {
        return "Hello World!";
    }
 
    public static String getMessage(String name) {
        return "Hello " + name;
    }
}
    

三、配置问题

1、检查端口号

确保HotSwap Agent的默认端口号8080未被占用,如果已占用应该修改端口号。在“Run/Debug Configurations”窗口中添加以下VM选项修改端口号。

    
-XXaltjvm=dcevm -javaagent:${path_to_your_folder}/hotswap-agent-1.4.0.jar=port=9090,disablePlugin=BitsetTracePlugin
    

2、检查JDK版本

请注意在使用HotSwap Agent时,要使用兼容的JDK版本。例如,在使用HotSwap Agent 1.4.0时,只能在支持Java 8或更高版本的JDK上使用。

四、其他问题

1、检查开发环境

如果以上所有方法都无法解决问题,那么最终应该检查开发环境。首先,确保开发环境已正确配置,例如JDK、Idea版本是否正确。其次,检查操作系统是否也支持热部署。请注意,某些操作系统可能无法支持热部署,例如一些较老的Linux发行版。