1.将写好的热更测试类放到Linux。
我是直接将项目放到了svn上面,然后通过svn在linux下直接拉取源码。然后使用使用
mvn clean package
使用上面的命令的时候一定要将依赖的tools.jar换成对应的jdk版本的。否则在linux或wind下无法执行。
将tools.jar安装为本地仓库,并导入到pom表中
>mvn install:install-file -DgroupId=com.extrajar -DartifactId=tools -Dversion=v1.0.0 -Dpackaging=jar -Dfile=tools.jar
2.更换掉使用到的tools.jar包为linux版本下的对应jar包
热更代码的方式如下
public void hotSwap(long playerId, String classes, String jarPath) {
try {
executorDispatcher.submitTask(playerId, () -> {
try {
RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
log.error(" runtimeMXBean Name :{} , processId : {}", runtimeMXBean.getName(), runtimeMXBean.getName().split("@")[0]);
VirtualMachine virtualMachine = VirtualMachine.attach(runtimeMXBean.getName().split("@")[0]);
//"E:\\HotSwap.jar ,E:\\@className1|className2"
virtualMachine.loadAgent(jarPath, classes);
virtualMachine.detach();
log.error("热更代码:{}成功!", classes);
} catch (Exception e) {
log.error("热更代码:{}失败:", classes, e);
}
});
} catch (Exception e) {
log.error("热更失败", e);
}
}
使用的代理jar包是通过另一个项目来构建的。代码也基本是固定的。具体的代码我放到我的码云地址,欢迎大家下载给个星星。
https://gitee.com/hhailiang/hot-swap