在批处理中加载某个目录所有的jar
来源:互联网 发布:mysql buffer 配置 编辑:程序博客网 时间:2024/06/04 18:24
转自:http://www.blogjava.net/lifesting/archive/2008/06/09/192562.html#206734
我平常做服务器或者应用程序的时候喜欢把各种依赖包如log4j, jdbc,commons-lang等放到一个lib目录下,然后启动的时候将这些jar包设置到classpath上。以前我经常使用setclasspath=log4j.jar;jdbc.jar;commons-lang.jar硬加载,但问题就是每新加入一个jar,就得改批处理一次,再就是每开发一个就得这么设置一次。很烦人,perl 创始人说,偷懒的程序员才是好程序员:),我需要一个通用的加载方式。
不管linux/windows或其它OS,都提供一个shell与kernel交互,并且shell都有一个类似的for内置commnd。
下面是linux bash的尝试
工作的很好,于是在windows同样try了一下batch
很奇怪的是最后的结果却是 classpath is bootstrap.jar;D:/workflow/bingo/lib/servlet-api.jar。很显然batch默认不支持变量迭代更改。
google了一下,发现原因,稍微改一下:
不管linux/windows或其它OS,都提供一个shell与kernel交互,并且shell都有一个类似的for内置commnd。
下面是linux bash的尝试
#!/usr/bin/sh
clspath="bootstrap.jar"
for k in *.jar
do
clspath=$clspath:$PWD/$k
echo "current jar is $k."
done
printf "classpath is %s" $clspath
clspath="bootstrap.jar"
for k in *.jar
do
clspath=$clspath:$PWD/$k
echo "current jar is $k."
done
printf "classpath is %s" $clspath
工作的很好,于是在windows同样try了一下batch
@echo off
set clspath=bootstrap.jar
for %%j in (*.jar) do (
set clspath=%clspath%;%cd%/%%j
echo current jar is %%j.
)
echo classpath is %clspath%
set clspath=bootstrap.jar
for %%j in (*.jar) do (
set clspath=%clspath%;%cd%/%%j
echo current jar is %%j.
)
echo classpath is %clspath%
很奇怪的是最后的结果却是 classpath is bootstrap.jar;D:/workflow/bingo/lib/servlet-api.jar。很显然batch默认不支持变量迭代更改。
google了一下,发现原因,稍微改一下:
1@echo off
2
3set clspath=bootstrap.jar
4setlocal enabledelayedexpansion
5for %%j in (*.jar) do (
6set clspath=!clspath!;%cd%/%%j
7echo current jar is %%j.
8)
9echo classpath is %clspath%
10endlocal
2
3set clspath=bootstrap.jar
4setlocal enabledelayedexpansion
5for %%j in (*.jar) do (
6set clspath=!clspath!;%cd%/%%j
7echo current jar is %%j.
8)
9echo classpath is %clspath%
10endlocal
对比一下,可以发现:
- 第4行加上了setlocal enabledelayedexpansion,即变量延迟展开。
- 第10行有一个endlocal,结束这个设置
- 第6行把%classpath%变成了!classpath!。
虽然目的达到了,还是要鄙视微软的dos batch,实在很弱,不知Powershell怎样。
参考资料:
setlocal
posted on 2008-04-13 15:32 Always BaNg. 阅读(1511) 评论(8) 编辑 收藏 所属分类: Java 、网摘备用
Feedback
# re: 在批处理中加载某个目录所有的jar2008-04-13 17:45x.matthew
其实通过设置可以加载一个目录的,下面是一个例子
java -Djava.ext.dirs="c:/lib" org.xmatthew.spy2servers.console.Main start 回复 更多评论
java -Djava.ext.dirs="c:/lib" org.xmatthew.spy2servers.console.Main start 回复 更多评论
# re: 在批处理中加载某个目录所有的jar2008-04-13 18:48BeanSoft
good!!! 回复 更多评论
# re: 在批处理中加载某个目录所有的jar2008-04-13 22:21和风细雨
不错。 回复 更多评论
# re: 在批处理中加载某个目录所有的jar2008-04-13 22:44luchunwei
start javaw -cp bin;lib/*; MainClass 回复 更多评论
# re: 在批处理中加载某个目录所有的jar2008-04-14 01:19隔叶黄莺
java -Djava.ext.dirs="c:/lib" 这样写不错的,就是假如有相同的 jar 包,但不同版本不知会出问题不,也破坏的类加载器的不同职责
start javaw -cp bin;lib/*; 用通配符的形式要 jdk 6 才支持。
还可这么写的
CLASSPATH=`find lib -name *.jar|xargs|sed "s/ /:/g"`
CLASSPATH=".:$CLASSPATH" 回复 更多评论
start javaw -cp bin;lib/*; 用通配符的形式要 jdk 6 才支持。
还可这么写的
CLASSPATH=`find lib -name *.jar|xargs|sed "s/ /:/g"`
CLASSPATH=".:$CLASSPATH" 回复 更多评论
# re: 在批处理中加载某个目录所有的jar2008-04-14 10:43Always BaNg.
@x.matthew
这种通过-Djava.ext.dirs="lib"的方式不错,但ext的类加载器与app的加载器不一样,跟classloader绑定的比如JNI library将会出现问题,所以只适合于你把自己的程序打到某个jar包放到lib目录下,跟依赖包一起被extclassloader加载。
@luchunwei
这种方式很先进,学习了!
@隔叶黄莺
原来在linux下只需要一句话,马上改了,简单才是美。 回复 更多评论
这种通过-Djava.ext.dirs="lib"的方式不错,但ext的类加载器与app的加载器不一样,跟classloader绑定的比如JNI library将会出现问题,所以只适合于你把自己的程序打到某个jar包放到lib目录下,跟依赖包一起被extclassloader加载。
@luchunwei
这种方式很先进,学习了!
@隔叶黄莺
原来在linux下只需要一句话,马上改了,简单才是美。 回复 更多评论
# re: 在批处理中加载某个目录所有的jar2008-04-16 16:43solo
很有用,谢谢各位! 回复 更多评论
# re: 在批处理中加载某个目录所有的jar[未登录]2008-06-09 00:38菜鸟
Windows里面可以用JSscript或VBSscript,跟LINUX的SHELL差不多强大,语法和WEB里面的一样,但是有很多现成对象,例如FileSystemObject可用 回复 更多评论
- 在批处理中加载某个目录所有的jar
- 在批处理中加载某个目录所有的jar
- 【转】在批处理中加载某个目录所有的jar
- 在CLASSPATH中加载目录下所有的jar
- 在CLASSPATH中加载目录下所有的jar
- 向CLASSPATH中增加某目录下所有Jar的批处理实现
- 在某个目录下的所有文件的内容中,查找包含某个字符串的文件
- 在某个目录下的所有文件中查找包含某个字符串的Windows命令
- 在某个目录下的所有文件中查找包含某个字符串的Windows命令
- 在某个目录下的所有文件中查找包含某个字符串的Windows命令
- Windows 在某个目录下的所有文件中查找包含某个字符串
- 在一个目录及其所有子目录下所有的文件中查找某个单词
- Windows下在某个目录下的所有文件中查找特定字符串
- JAVA加载JAR包并调用JAR包中某个类的某个方法
- 加载并获取jar包中某个类的某个方法
- 如何在linux正常启动的系统中(挂载rootfs)某个目录下来加载ubi文件类型的recoveryfs?
- 列出某个目录下的所有文件
- 获取某个目录下所有的文件
- EXT2.0 做的登陆界面
- sun的java编译器对string常量表达式的处理和优化
- DLL
- StarMx,Jopr,Galaxy
- 如何实现从SDI到MDI的转化
- 在批处理中加载某个目录所有的jar
- Xen Memory Management
- Java连接oracle的关于oracle.jdbc.driver.OracleDriver的错误的解决
- java集合类set个人总结
- Eclipse Java RMI 入门
- 一个计算机专业学生几年的编程经验汇总
- js控制div 在页面的固定位置
- API
- 查找第k小(中位数)