运行java程序的脚本经常要将conf文件夹和lib文件夹中所有jar包加入到classpath里,送给java命令的-cp参数,当使用JDK6及以上版本时,可以写成:
java -cp lib/*:conf com.boco.nep.Server
其中代表.jar或者*.JAR,参考"http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath";
如果上面的方法无效,也可以采用遍历方法加入jar包:
bash on Unix (start.sh in $APP_HOME/bin folder)
JARS="./conf"
for i in ls ./lib/*.jar
; do
JARS="\(JARS":\)i
done
exec "${JAVA_HOME}/bin/java" -cp $JARS com.boco.nep.Server
Windows (start.bat in $APP_HOME\bin folder)
@echo off cd ../lib set jars= SETLOCAL ENABLEDELAYEDEXPANSION for /f %%i in ('dir /b *.jar') do set jars=%%i;!jars!
call java -cp %jars% com.boco.nes.mina.Server
注意jar包文件中不能有空格,否则jars中只有空格前的那一部分文件名;
语法解释
"dir /b *.jar"以紧凑格式列出lib文件夹下所有的jar包文件(不包括文件大小、修改时间等信息);
%%i是声明的循环变量(bat脚本中循环变量以%%开头加一个字母组成);
"for /f
"SETLOCAL ENABLEDELAYEDEXPANSION"与"!jars!"配合实现变量jars的延迟赋值,其作用参考批处理中setlocal enabledelayedexpansion的作用详细整理。
Windows版中使用语法的含义可参考Windows bat命令编写大全;for命令的用法;
多层目录遍历
Windows多层目录遍历可以用"for /r"或者"for /f %%i ('dir /ad dir_name') do command",其中"dir /ad"表示只列出目录,参考FOR /D。