1

DCEVM ホットスワップ エージェントを使用して、Java スプリング ブート アプリケーションを 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 ファイルが更新されますが、変更が反映されず、ログが生成されません。

4

1 に答える 1