レガシーな開発環境で 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