如何使用 DCEVM/Hotswap Agent 更新 jar 文件?

How to use DCEVM/Hotswap Agent with jar file update?

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

运行 提取的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

在 运行 执行上述命令后,如果我进行任何更改并重新编译然后替换更新的 class 文件,则会检测到更改并且我的应用会反映这些更改。

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

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

运行 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

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

jar uf app.jar path/HealthController.class

jar 文件已更新,但更改未反映且未生成日志。

HotswapAgent 未检测到 jar 文件中的 class 修改。您可以使用 extraClasspath 配置参数代替它。查看 http://hotswapagent.org/mydoc_configuration.html 如何设置它。