首页 > 解决方案 > 如何使用 DCEVM/Hotswap 代理进行 jar 文件更新?

问题描述

我正在使用 DCEVM 热插拔代理将 java spring boot 应用程序作为 jar 文件运行。当我更改 jar 文件中的一些类文件时,应用程序不会重新加载这些更改。但是如果我提取我的 jar 文件并将我的应用程序作为一个简单的 java 类文件运行,将所有依赖项添加到类路径(就像 IntelliJ Idea 所做的那样),然后替换它成功重新加载的任何类文件。

运行提取的 jar 文件:

java -XXaltjvm=dcevm -javaagent:path/hot-swap/hotswap-agent-1.3.1-SNAPSHOT.jar=autoHotswap=true -Dspring.profiles.active=local -Dserver.port=8082 -classpath path/jdk1.8.0_191.jdk/Contents/Home/jre/lib/charsets.jar:--jdk-lib-jars:./path/classes:..other-jar-file-path com.company.app.App

运行上述命令后,如果我进行任何更改并重新编译然后替换更新的类文件,则检测到更改并且我的应用程序反映了更改。

HOTSWAP AGENT: 15:35:55.349 RELOAD (org.hotswap.agent.config.PluginManager) - Reloading classes [com.company.controller.HealthController] (autoHotswap)

我得到上面的日志,它告诉我该类已重新加载。一切正常。

运行jar文件:

java -XXaltjvm=dcevm -javaagent:path/hot-swap/hotswap-agent-1.3.1-SNAPSHOT.jar=autoHotswap=true -Dspring.profiles.active=local -Dserver.port=8081 -jar app.jar

运行后如果我使用以下命令更新 jar 文件:

jar uf app.jar path/HealthController.class

jar 文件得到更新,但没有反映更改,也没有生成日志。

标签: javajarhotswapdcevmhotswapagent

解决方案


HotswapAgent 不检测 jar 文件中的类修改。取而代之的是,您可以使用 extraClasspath 配置参数。查看http://hotswapagent.org/mydoc_configuration.html如何设置它。


推荐阅读