我正在使用DCEVM热交换代理作为jar文件运行一个java spring引导应用程序。当我更改jar文件中的某些类文件时,应用程序不会重新加载这些更改。但是,如果我提取我的jar文件并作为一个简单的java类文件运行我的应用程序,将所有依赖项添加到类路径(就像IntelliJ的想法一样),那么替换它成功地重新加载的任何类文件。
运行解压缩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.classjar文件被更新,但是更改没有反映,也没有生成日志。
发布于 2020-01-06 14:08:51
HotswapAgent不检测jar文件中的类修改。您可以使用extraClasspath配置参数来代替它。看看http://hotswapagent.org/mydoc_configuration.html如何设置它。
https://stackoverflow.com/questions/58048227
复制相似问题