読者です 読者をやめる 読者になる 読者になる

Corredor

ウェブ、プログラミングの勉強メモ。

レガシーな開発環境で Watch っぽいことがしたくて自作したバッチ

WebLogic Server に WAR ファイルをデプロイして、Java 製アプリケーションを開発している。ワケあって Tomcat は使えず、開発したモジュールは毎度 WLS にデプロイする必要があってゲロ面倒くさかった。

しかし、JSP ファイルであれば、_WL_internal フォルダ配下に JSP ファイルを投げ込めば即反映してくれることを発見した。

パスは /domains/domain_name/servers/AdminServer/tmp/_WL_internal/ とかそんな感じ。WLS が WAR ファイルを解凍して参照している場所みたい。

ココに対して、IDE で編集している JSP ファイルを更新するたびに投げ込めれば、Gulp の Watch っぽいことができるという寸法だ。

というわけでこんな雑な Windows バッチを作ってみた。

Rem IDE で編集しているワークスペースのうち、JSP ファイルが存在するルートディレクトリ
Set SRC_DIR=C:\Workspace\MyProject\pages\

Rem WLS の JSP ファイルが解凍されているルートディレクトリ (hogefuga 部分はランダムな文字列)
Set DIST_DIR=C:\Oracle\MiddleWare\domains\domain_name\servers\AdminServer\tmp\_WL_internal\hogefuga\

:LOOP
Xcopy /d /k /s /y %SRC_DIR%\*.* %DIST_DIR%

Timeout 5
Goto :LOOP

Exit /b

コピー元のファイルがある場所が %SRC_DIR%、コピー先のディレクトリを %DIST_DIR% で変数宣言しておく。場所は適宜設定する。

ファイルのコピーには Xcopy というコマンドを使用した。オプションの意味は以下のとおり。

  • /d : コピー元の更新日時がコピー先よりも新しければコピーする
  • /k : 属性もコピーする
  • /s : サブフォルダも対象にする
  • /y : 上書き前の確認メッセージを出さないようにする
  • /q : コピー中のファイルを表示しないようにする

キモとなるのは /d オプション。コピー元のファイルの方が新しければコピーするので、新しくない場合はコピーが発生しない。普通なら「開発した日時」より「デプロイ後解凍した時刻」の方が新しくなるはずなので、基本的にコピーは発生しない。コピーが発生するということは、デプロイ後に行われた編集ということだ。

そしてコレを Timeout で適当に間隔を開けつつ、無限ループで実行している。実に乱暴だが、ファイルの更新を検知してサーバ側にコピーしていくので、編集した内容を即時確認できる。

…もうこんな乱暴なテクニックを身に付けずに済む仕事がしたい。w