Chinaunix

标题: java application打包后找不到JDBC驱动 [打印本页]

作者: soararing    时间: 2006-02-09 16:12
标题: java application打包后找不到JDBC驱动
奇怪的问题,我的JDK1.4, 把驱动mysql-connector-java-3.1.12-bin.jar放在
%JAVA_HOME%/jre/lib/ext/目录下,在eclipse中编译运行成功,应用打包后却找不到JDBC驱动
,各位大侠,这是什么原因啊?
作者: perryhg    时间: 2006-02-09 23:57
你运行的jre和开发用的不同吧,windows里面安装jdk会产生一个单独的jre装在c:\program files\java\jre.....
所以,不要依赖于把jar库文件放在jre\ext下面。万一以后升级jre,也会带来不少麻烦。
作者: soararing    时间: 2006-02-10 08:48
标题: 回复 2楼 perryhg 的帖子
果然是这个问题,改了就好了,多谢。
作者: soararing    时间: 2006-02-10 08:53
标题: 回复 2楼 perryhg 的帖子
但是你说不要依赖于把jar库文件放在jre\ext下面,那我把一些JAR文件放在哪里必较合适呢?
我现在也遇到了这个问题,如何我把自己的应用打的包放在别的机器上运行,还必须要在别的机器上先安装依赖的包,这样很麻烦,怎样把所依赖的包和应用一块儿打包呢,编译的时候如何设置呢?我试了几次,老是没有成功,还请帮忙一下,多谢。
作者: wolfg    时间: 2006-02-10 13:56
原帖由 soararing 于 2006-2-10 08:53 发表
但是你说不要依赖于把jar库文件放在jre\ext下面,那我把一些JAR文件放在哪里必较合适呢?
我现在也遇到了这个问题,如何我把自己的应用打的包放在别的机器上运行,还必须要在别的机器上先安装依赖的包,这样很麻 ...


写一个ant的build脚本,将所有用到的依赖包放到你应用自己的lib目录里
作者: perryhg    时间: 2006-02-10 21:15
提供几个方法:

方法一:
将使用的jar包解开,然后把class文件和你编译的class文件一起打成一个包。
优点:所有需要的东西全部在一个jar包里面,不会发生找不到库文件错误。
缺点:文件会非常大,因为包含了很多不是你自己开发的class,有些签名的包解开再重新打包就会使签名失效而无法运行,比如mail.jar
适用范围:小项目,只需要一个jar即可运行,不含特殊的经过签名包。

方法二:
写一个启动脚本,自动装载某个指定的目录下的jar文件到classpath

  1. @echo off
  2. if '%1=='## goto ENVSET

  3. SET APPHOME=%~dp0
  4. SET LIBDIR=%APPHOME%lib
  5. rem echo %LIBDIR%
  6. SET CLSPATH=.
  7. FOR %%c in (%LIBDIR%\*.jar) DO Call %0 ## %%c

  8. rem echo %CLSPATH%
  9. rem echo %0
  10. goto RUN

  11. :RUN
  12. java -cp %CLSPATH% mypackage.MainClass
  13. goto END

  14. :ENVSET
  15. set CLSPATH=%CLSPATH%;%2
  16. goto END

  17. :END
复制代码

优点:自动加载指定目录下所有的jar
缺点:对tomcat等本来就用复杂的脚本启动的程序需要花额外的时间去整合.bat和.sh的集成性
适用范围:可用.bat或者.sh脚本启动的简单任务。

方法三
在系统变量中设置CLASSPATH
优点:所有程序都可以share这个变量
缺点:必须手工指定每个单独的jar文件,比如CLASSPATH=c:\cpath\jlib1.jar;c:\cpath\jlib2.jar;如果文件很多,那么设置jar的classpath会是一项非常痛苦而烦躁的工作.
适用范围:引用的jar库文件不多且不会经常变的情况下。

方案四
修改你程序的代码,多设置一个系统的property
Properties props = System.getProperties();
String extdir = props.getProperty("java.ext.dirs");
extdir = extdir + File.pathSeparator + "lib"; //把当前目录下的lib目录作为库文件目录,把需要的jar文件放入这个目录。
优点:不依赖于修改系统参数或者启动脚本
缺点:需要在程序代码中指定库文件路径不方便移植。
适用范围:有大量第三方库文件需要引用。项目不考虑移植。

当然实现还不止这四种方案,需要你自己去思考并取舍。
作者: tree135311    时间: 2006-05-24 12:39
辛苦了六楼的斑竹!顶一下




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2