Java
IntelliJ
DCEVM
HotSwapAgent
ホットスワップ

【Javaの開発効率UP】DCEVMとHotSwapAgentで、再起動せずにソースコードの変更を反映する

What's DCEVM

https://github.com/dcevm/dcevm
http://hotswapagent.org/

Java実行中に動的にコードを差し替えるためのJVMの拡張。
HotSwapAgentと組み合わせて、アプリケーションを再起動することなしにコードの変更を反映することができる。

IntelliJのプラグインがあるのでそれと合わせて使う方法を書きます

参考:
https://github.com/dmitry-zhuravlev/hotswap-agent-intellij-plugin#dcevm-installation

他のHot Swapツールとの比較

Javaを再起動せずにソースコードの変更を反映する方法はいろいろある

IntellijやEclipse等のIDEのホットスワップ機能

クラスの構成に変更がなければ動的に差し替えられる。
が、変更があったときには差し替えられない(メソッドが増えた、名前が変わった、pricvate→publicにした、など)

JRebel

最強。だけどお値段が高い

Spring Loaded (※Spring専用)

開発が止まっている

DCEVM + HotSwapAgent

親クラスやインターフェースの変更以外は差し替えられる

インストール方法

参考:
https://github.com/dmitry-zhuravlev/hotswap-agent-intellij-plugin#dcevm-installation

1. JDKをインストール

DCEVMはすべてのバージョンのJDKに対応しているわけではない。
現在(2018/5/22)対応している最新のバージョンはJava 8u152なのでこのバージョンのJavaをダウンロードしてインストール

ここからダウンロードできる。が、過去のJDKをダウンロードするにはユーザ登録が必要。
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html

2. DCEVMをインストール

ダウンロード

https://github.com/dcevm/dcevm/releases/ からDCEVM-8u152-installer.jarをダウンロード。

インストーラ起動

管理者権限で起動

sudo java -jar DCEVM-8u152-installer.jar

JDKにDCEVMを適用

  1. Add instration directory...をクリックし、JDKのディレクトリを開く
  2. 1で開いたJDKを選択し、Install DCEVM as altjvmをクリック 出典: https://github.com/dmitry-zhuravlev/hotswap-agent-intellij-plugin#dcevm-installation

IntelliJにHotSwapAgentプラグインをインストール

Screen Shot 2018-05-15 at 11.07.01.png (372.8 kB)

HotSwapAgent」で検索してInstallをクリック。インストール完了後IntelliJを再起動

IntelliJで使用するJavaを変更

FileProject Structure...を開き、Project SDKNew...JDKをクリックし、↑でインストールしたJDKを選択
Screen Shot 2018-06-08 at 0.12.25.png

HotSwapAgent Pluginを有効にする

PreferencesToolsHotSwapAgent
HotSwapAgentを有効にする起動設定にチェックを入れる
Screen Shot 2018-06-07 at 23.51.28.png

ついでにHotSwapが有効になっていることを確認
Screen_Shot_2018-05-15_at_11_46_54.png (257.0 kB)

完成!

Javaアプリケーション立ち上げる(デバッグ起動)とHOTSWAP AGENTのログが出る。
Screen Shot 2018-05-15 at 11.24.32.png (136.0 kB)
この状態でコードを変更し、コンパイルすると、アプリケーションを再起動しなくても即時に反映される。

  • 単体でコンパイル(: Command+Shift+F9/ ⊞: Ctrl+Shift+F9)
  • 全部コンパイル(: Command+F9/ ⊞: Ctrl+F9)