FOR %%i IN ("lib\*.jar") DO CALL "setclasspath.bat" %%i改为:FOR %%i IN ("lib\*.jar") DO CALL "setclasspath.bat" %cd%\%%i 然后注意看看: echo %CLASSPATH% 的最终值
试了一下,还是不行。输出的classpath值是lib下面的全部文件(绝对路径),但还是提示找不到类。怀疑启动后并没有按照这个classpath走. F:\test>echo F:\test F:\test F:\test\lib\sqljdbc4.jar;F:\test\lib\mysql-connector-java-5.1.19-bin.jar;F:\test \lib\jsoup-1.6.1.jar; universal.Spider 2012-5-12 20:03:41 spider.beans.DBBean initSqlServer 严重: null java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at spider.beans.DBBean.initSqlServer(DBBean.java:33)
然后注意看看:
echo %CLASSPATH%
的最终值
F:\test>echo F:\test
F:\test
F:\test\lib\sqljdbc4.jar;F:\test\lib\mysql-connector-java-5.1.19-bin.jar;F:\test
\lib\jsoup-1.6.1.jar;
universal.Spider
2012-5-12 20:03:41 spider.beans.DBBean initSqlServer
严重: null
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at spider.beans.DBBean.initSqlServer(DBBean.java:33)
先尝试直接命令行执行看看吧。
换了另一种方法,直接在程序启动的时候,加入一行代码:
System.setProperty("java.class.path", ".;F:\\test\\lib\\sqljdbc4.jar;");
这样就行了。
上面两种方法,只有第二种能成功,不知道是第一种的批处理写错了还是怎么的。第二种成功。所以目前来说可以写一个函数来初始时返回lib文件夹下的所有文件的字符串表示,然后设置成java.class.path
不过这个问题还应继续关注。