2015年1月24日土曜日

[Java][batch]Javaプログラムをバッチファイルから実行する

バッチファイルからJavaを呼び出す方法について記述する。
バッチファイルからJavaコマンドを呼び出す書式は、次の通り。
java -cp [クラスパス] [実行するクラスの完全修飾名] [引数1] [引数2] [引数3]・・・

クラスパスはカレントディレクトリを基準とした相対パスで記述するのが一般的。
Windowsの場合、パス名はセミコロン(;)で区切る。
例えば次のように記述した場合、
java -cp .;bin;lib\log4j.jar

ピリオド(.)はカレントディレクトリを指すので、「カレントディレクトリ」、「binディレクトリ」、「libディレクトリ配下のlog4j.jar」という3つのパスを指定していることになる。
クラスを動かすために必要な全てのクラスパスが通っていないとクラスが見つからないエラーになるので注意を要する。

バッチファイルの内容は、次の通り。 (以下のサンプルでは、絶対パスをバッチファイル内に記述しないために、外部ファイルからバッチ内で使う可変引数を読み込む)
呼び出しているクラスはapp.AppMainというクラスであり、cmd.FileFinderやcmdFilePickerなどのクラスはapp.AppMainから呼び出される個別機能である。(入り口さえ作っておけば、複数機能を同じバッチから呼び出せることを示すためのサンプル)

呼び出しているapp.AppMain他のクラスは、別の記事に掲載する。

<[batch.properties]バッチ内で可変引数として読み込ませる値>
JAVA_CMD=C:\pleiades\java\6\bin\java.exe
LOG4J_JAR=lib\org.apache.log4j_1.2.15.v201012070815.jar

<[doCmd.bat]バッチファイルの内容>
@echo off
rem 外部ファイルから可変引数を呼び出す
for /f "tokens=1,2 delims==" %%a in ('findstr JAVA_CMD batch.properties') do set JAVA_CMD=%%b
for /f "tokens=1,2 delims==" %%a in ('findstr LOG4J_JAR batch.properties') do set LOG4J_JAR=%%b

rem コマンドラインからJavaクラスを呼び出すための変数設定
set CLASS_PATH=.;bin;%LOG4J_JAR%
set APP_MAIN=app.AppMain
set CMD_TOOL=%JAVA_CMD% -cp %CLASS_PATH% %APP_MAIN%

rem ファイル検索コマンド
set FIND_FILE=%CMD_TOOL% cmd.FileFinder

rem ファイル抽出コマンド
set PICK_UP_FILE=%CMD_TOOL% cmd.FilePicker

rem ファイル検索を実施する。
rem 第1引数 : 検索対象ディレクトリ名
rem 第2引数 : 検索するファイル名(正規表現)
rem 第3引数 : 検索結果出力ファイル名
rem %FIND_FILE% "path1" "pattern" "resultfilename"

rem ファイルを抽出する
rem 第1引数 : 検索対象ディレクトリ名
rem 第2引数 : 検索するファイル名(正規表現)
rem 第3引数 : 検索結果出力先フォルダ名
%PICK_UP_FILE% "path1" "pattern" "path2"

pause

1 件のコメント: