我正在使用 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 文件得到更新,但没有反映更改,也没有生成日志。