最近开发遇到一个大难题,JDK版本冲突。工作以来头一回遇到这种问题,有点手足无措。最后在公司平台的淫威下(版本为JDK1.4),我不得不妥协:在JDK1.4下头重新开放。
考虑到与平台接触的就小部分的功能,决定用RMI来实现该功能。好在原先开发的功能块之间的耦合度不是很高,直接将单个功能剥离出来的难度不是很大。剩下的就只需要考虑JDK1.4下编译、打包、部署和运行了。
看似很简单的过程,在执行过程中却遇到不小的麻烦,JDBC链接数据库、rmic生成存根和骨架文件命令、jar打包命令…… 好多看似很熟悉的东西在实际过应用程中显的那么脆弱,好多都给忘了,特此将这次经历记录下来。
STEP 1: rmic
1. JDK1.4下会生成存根和骨架文件,但在JDK1.5下只有stub(存根) 文件。
2. rmic rca.serviceImpl.generic0348.ServiceImpl 只能在class存放的根目录下头才能找到ServiceImpl.class, 否则会报错:Class rca.serviceImpl.generic0348.ServiceImpl not found.
STEP 2: jar 生成可执行jar 包
Q: /java1.4/bin/jar cvfm rmiService.jar *.* 打的jar包未设定Main-Class(Failed to load Mani-Class manifest attribute from rmiservice.jar)。
A: 新建一个main.mf 文件,Main-Class: 可执行主类全名(如果打包了的话包含包名),需要回车。
然后执行/java1.4/bin/jar cvfm rmiService.jar main.mf *.*
STEP 3: 运行
原以为这样就可以大功告成,直接在服务器上执行该jar包就行,可最后联调的时候却找不到我放在 rmiService.jar中的 ojdbc14.jar , 因为这样JVM是找不到第三方jar 包的。
1. 在main.mf 文件中添加: Class-Path: classes12.jar lib/class12.jar
2. /opt/j2sdk1.4.2_10/bin/java -Xbootclasspath/a:/product/rmi_server/ojdbc14.jar -jar rmiService.jar
这样JVM 才能加载成功。
链接:在可执行jar 包中动态载入第三方jar class的有关问题
(原地址文章好像被删除,现在附件链接,同时感谢原文作者)