【转】在批处理中加载某个目录所有的jar
2016-01-25 16:28
417 查看
原文:http://www.blogjava.net/lifesting/archive/2008/04/13/192562.html
我平常做服务器或者应用程序的时候喜欢把各种依赖包如log4j, jdbc, commons-lang等放到一个lib目录下,然后启动的时候将这些jar包设置到classpath上。以前我经常使用set classpath=log4j.jar;jdbc.jar;commons-lang.jar硬加载,但问题就是每新加入一个jar,就得改批处理一次,再就是每开发一个就得这么设置一次。很烦人,perl 创始人说,偷懒的程序员才是好程序员:),我需要一个通用的加载方式。
不管linux/windows或其它OS,都提供一个shell与kernel交互,并且shell都有一个类似的for内置commnd。
下面是linux bash的尝试
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
#!/usr/bin/sh
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
clspath="bootstrap.jar"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
for k in *.jar
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
do
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
clspath=$clspath:$PWD/$k
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo "current jar is $k."
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
done
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
printf "classpath is %s" $clspath
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
工作的很好,于是在windows同样try了一下batch
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
@echo off
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=bootstrap.jar
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
for %%j in (*.jar) do (
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=%clspath%;%cd%\%%j
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo current jar is %%j.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo classpath is %clspath%
很奇怪的是最后的结果却是 classpath is bootstrap.jar;D:\workflow\bingo\lib\servlet-api.jar。很显然batch默认不支持变量迭代更改。
google了一下,发现原因,稍微改一下:
1
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
@echo off
2
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
3
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=bootstrap.jar
4
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
setlocal enabledelayedexpansion
5
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
for %%j in (*.jar) do (
6
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=!clspath!;%cd%\%%j
7
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo current jar is %%j.
8
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
)
9
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo classpath is %clspath%
10
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
endlocal
对比一下,可以发现:
第4行加上了setlocal enabledelayedexpansion,即变量延迟展开。
第10行有一个endlocal,结束这个设置
第6行把%classpath%变成了!classpath!。
虽然目的达到了,还是要鄙视微软的dos batch,实在很弱,不知Powershell怎样。
参考资料:
setlocal
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(350) | 评论(0) | 转发(0) |
0
上一篇:【转】jar参数运行应用时classpath的设置方法
下一篇:[转]java的System.getProperty()方法可以获取的值
相关热门文章
View与ViewGroup的概念
关于ip_conntrack跟踪连接满导...
我的第一个python程序之续集...
HTML5 音视频媒体处理相关...
欢迎进攻高于所有在ChinaUnix...
Tomcat 6 配置SSI
tomcat + ssi
JDK1.6官方下载_JDK6官方下载_...
Java 判断文件夹、文件是否存...
如何正确(完美)卸载Java/JDK/J...
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
我平常做服务器或者应用程序的时候喜欢把各种依赖包如log4j, jdbc, commons-lang等放到一个lib目录下,然后启动的时候将这些jar包设置到classpath上。以前我经常使用set classpath=log4j.jar;jdbc.jar;commons-lang.jar硬加载,但问题就是每新加入一个jar,就得改批处理一次,再就是每开发一个就得这么设置一次。很烦人,perl 创始人说,偷懒的程序员才是好程序员:),我需要一个通用的加载方式。
不管linux/windows或其它OS,都提供一个shell与kernel交互,并且shell都有一个类似的for内置commnd。
下面是linux bash的尝试
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
#!/usr/bin/sh
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
clspath="bootstrap.jar"
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
for k in *.jar
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
do
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
clspath=$clspath:$PWD/$k
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo "current jar is $k."
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
done
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
printf "classpath is %s" $clspath
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
工作的很好,于是在windows同样try了一下batch
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
@echo off
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=bootstrap.jar
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
for %%j in (*.jar) do (
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=%clspath%;%cd%\%%j
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo current jar is %%j.
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo classpath is %clspath%
很奇怪的是最后的结果却是 classpath is bootstrap.jar;D:\workflow\bingo\lib\servlet-api.jar。很显然batch默认不支持变量迭代更改。
google了一下,发现原因,稍微改一下:
1
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
@echo off
2
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
3
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=bootstrap.jar
4
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
setlocal enabledelayedexpansion
5
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
for %%j in (*.jar) do (
6
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
set clspath=!clspath!;%cd%\%%j
7
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo current jar is %%j.
8
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
)
9
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
echo classpath is %clspath%
10
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
endlocal
对比一下,可以发现:
第4行加上了setlocal enabledelayedexpansion,即变量延迟展开。
第10行有一个endlocal,结束这个设置
第6行把%classpath%变成了!classpath!。
虽然目的达到了,还是要鄙视微软的dos batch,实在很弱,不知Powershell怎样。
参考资料:
setlocal
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(350) | 评论(0) | 转发(0) |
0
上一篇:【转】jar参数运行应用时classpath的设置方法
下一篇:[转]java的System.getProperty()方法可以获取的值
相关热门文章
View与ViewGroup的概念
关于ip_conntrack跟踪连接满导...
我的第一个python程序之续集...
HTML5 音视频媒体处理相关...
欢迎进攻高于所有在ChinaUnix...
Tomcat 6 配置SSI
tomcat + ssi
JDK1.6官方下载_JDK6官方下载_...
Java 判断文件夹、文件是否存...
如何正确(完美)卸载Java/JDK/J...
linux dhcp peizhi roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
相关文章推荐
- 3xx Redirection
- 【转】jar参数运行应用时classpath的设置方法
- java内存垃圾回收机制
- 【转】2010美国职位:软件工程师最佳
- 【转】命令行执行main方法
- GDI+抗锯齿
- 【转】Java缓存框架 EhCache
- 【转】JAVA下的多线程程序造成系统时钟变快
- 【转】c语言static和extern的用法
- 【转】Java内存优化
- 【转】是什么成就了一名“高级”程序员?
- 【转】JAVA中的内联函数
- 【转】是什么造就了伟大的程序员?
- Java并发编程实践之ThreadLocal变量
- 深入研究java.lang.ThreadLocal类
- 【转】追加内容到文件末尾的几种常用方法
- 【转】使用Eclipse远程调试发布在Tomcat上的Web应用
- 【转】Release下报错,Debug下正常原因总结
- java性能测试工具
- Visual Studio 2010离线安装MSDN Library[转]