关于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%
的最终值