日期:2014-05-20  浏览次数:20613 次

关于bat启动jar程序的问题(包含第三方jar包)
做了一个程序,由于需要用到很多第三方jar包,并且随着后续的开发,用到的jar包可能会更多,所以直接在manifest.mf里面写着感觉不太好。所以想着把所有用到的jar包都放在lib文件夹下面,然后制作一个批处理用批处理先加载jar包,然后启动程序。但是却遇到了棘手的问题,就是提示找不到类,也就是说第三方包没有加进去。请高手们来解答一下。
先来看一下我的程序目录

其中Spider-Frame.jar为程序主框架,启动时启动的就是启动此程序,config.properties为配置文件,plugins为插件(插件很多,并且后续还会添加其他功能的插件,所以现在不能把第三方jar包写死)。lib文件夹就是存放所有的第三方jar包。两个批处理为启动程序用,功能一样,只是一个现实控制台一个不显示。
下面是批处理的代码:

setclasspath.bat
Java code
SET _CLASSPATHCOMPONENT=%1
:argCheck
IF %2a==a GOTO gotAllArgs
SHIFT
SET _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
GOTO argCheck
:gotAllArgs
SET CLASSPATH=%_CLASSPATHCOMPONENT%;%CLASSPATH%



启动.bat
Java code
@echo off
set CLASSPATH=
FOR %%i IN ("lib\*.jar") DO CALL "setclasspath.bat" %%i
echo %CLASSPATH%
java -cp "%CLASSPATH%"  -jar -Xms256m -Xmx512m Spider-Frame.jar %*
pause


这是启动后提示的,显示找不到类,但是所需要的第三方jar包都在lib下面。


说明:程序没有问题,直接在manifest.mf中配置好jar包就会正常。

求高手来回答一下,不胜感激

------解决方案--------------------
建议加上当前路径,不要用相对路径:

echo 当前盘符和路径:%~dp0



echo 当前CMD默认目录:%cd%

这两个参数中的一个
------解决方案--------------------
FOR %%i IN ("lib\*.jar") DO CALL "setclasspath.bat" %%i

改为:

FOR %%i IN ("lib\*.jar") DO CALL "setclasspath.bat" %cd%\%%i


然后注意看看:
echo %CLASSPATH%
的最终值