免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4242 | 回复: 6
打印 上一主题 下一主题

java application打包后找不到JDBC驱动 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-09 16:12 |只看该作者 |倒序浏览
奇怪的问题,我的JDK1.4, 把驱动mysql-connector-java-3.1.12-bin.jar放在
%JAVA_HOME%/jre/lib/ext/目录下,在eclipse中编译运行成功,应用打包后却找不到JDBC驱动
,各位大侠,这是什么原因啊?

论坛徽章:
0
2 [报告]
发表于 2006-02-09 23:57 |只看该作者
你运行的jre和开发用的不同吧,windows里面安装jdk会产生一个单独的jre装在c:\program files\java\jre.....
所以,不要依赖于把jar库文件放在jre\ext下面。万一以后升级jre,也会带来不少麻烦。

论坛徽章:
0
3 [报告]
发表于 2006-02-10 08:48 |只看该作者

回复 2楼 perryhg 的帖子

果然是这个问题,改了就好了,多谢。

论坛徽章:
0
4 [报告]
发表于 2006-02-10 08:53 |只看该作者

回复 2楼 perryhg 的帖子

但是你说不要依赖于把jar库文件放在jre\ext下面,那我把一些JAR文件放在哪里必较合适呢?
我现在也遇到了这个问题,如何我把自己的应用打的包放在别的机器上运行,还必须要在别的机器上先安装依赖的包,这样很麻烦,怎样把所依赖的包和应用一块儿打包呢,编译的时候如何设置呢?我试了几次,老是没有成功,还请帮忙一下,多谢。

论坛徽章:
0
5 [报告]
发表于 2006-02-10 13:56 |只看该作者
原帖由 soararing 于 2006-2-10 08:53 发表
但是你说不要依赖于把jar库文件放在jre\ext下面,那我把一些JAR文件放在哪里必较合适呢?
我现在也遇到了这个问题,如何我把自己的应用打的包放在别的机器上运行,还必须要在别的机器上先安装依赖的包,这样很麻 ...


写一个ant的build脚本,将所有用到的依赖包放到你应用自己的lib目录里

论坛徽章:
0
6 [报告]
发表于 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文件放入这个目录。
优点:不依赖于修改系统参数或者启动脚本
缺点:需要在程序代码中指定库文件路径不方便移植。
适用范围:有大量第三方库文件需要引用。项目不考虑移植。

当然实现还不止这四种方案,需要你自己去思考并取舍。

论坛徽章:
0
7 [报告]
发表于 2006-05-24 12:39 |只看该作者
辛苦了六楼的斑竹!顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP