java - 如何使用 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 文件得到更新,但没有反映更改,也没有生成日志。
解决方案
HotswapAgent 不检测 jar 文件中的类修改。取而代之的是,您可以使用 extraClasspath 配置参数。查看http://hotswapagent.org/mydoc_configuration.html如何设置它。
推荐阅读
- r - 如何防止R在频率函数中四舍五入?
- sql - 将剩余值添加到 sql server 中的下一行
- powershell - 如何解锁满足特定条件的帐户
- dns - DNS:无法转发到“外部”域
- reactjs - React TypeScript:类型“null”不可分配给类型“CanvasRenderingContext2D”
- emacs - 如何设置键绑定以在 emacs 中创建并跳转到下一行?
- javascript - 难以理解在此函数中编写的 Javascript
- c# - aspnet core - 浏览器未在文件结果中显示下载进度
- java - 我在构建 Spring Boot 的 Web 项目时无法使用 freemarker
- mysql - 如何解析 json 对象 - mysql