开发环境:RAD 6.0
JDK:1.3
测试服务器:WAS 5.0测试服务器
工程类型:web工程
问题过程
1)刚开始直接把Jakarta-ORO.jar导入到lib中,使用Jakarta-ORO Util.split()提示找不到类;但是直接在调用Util的类里面加main可以正确运行;
2)怀疑网上下载的Jakarta-ORO.jar有问题,自己重新打包,问题照旧;
3)删除jar,将Jakarta-ORO的源代码全部导入工程,同样有问题。。。而且debug的时候不能跟进Jakarta-ORO的源代码,提示找不到源
4)将Util.java里面的方法原封不动的复制出来。。。无论直接加到我的类,还是新建类(和调用类同一个包和不同包都测了),都没有任何问题
5)将Util.java改名,新建一个类(在Jakarta-ORO Util原来的包下面),原封不动复制Util的代码过去,还是有问题
虽然可以通过复制代码出来暂时解决,但是总感觉奇怪,也想找出原因,为了这个东东测试了一天了,个人认为:
1)RAD bug?
2)Jakarta-ORO bug?
3)曾经怀疑是测试服务器缓存问题。。新建不同名字的工程,复制代码过去,新建测试服务器,问题照旧!!!
补充一点,只有使用Util这个类报错,其他Jakarta-ORO类正常
确实找不出为什么了。。。请大家帮忙了,谢谢先
问题补充
在CSDN上找到一个类似的问题
http://topic.csdn.net/t/20021206/09/1236060.html
在使用jakarta-oro-2.0.6的时候,编写的一个测试程序,编译的时候通过,可是运行的时候,却报
java.lang.NoSuchMethodError
程序代码如下:(部分主要的)
public static void main(String[] args){
try{
String link=" dsfasdfsda";
String regexForLink="IMG(.[^]∗)\[\/IMG";
PatternCompiler compiler = new Perl5Compiler();
Pattern patternForLink=compiler.compile(regexForLink,Perl5Compiler.CASE_INSENSITIVE_MASK);
PatternMatcher matcher = new Perl5Matcher();
StringBuffer sb = new StringBuffer();
int i = Util.substitute(sb, matcher,patternForLink,
new Perl5Substitution("$1"),
link,
Util.SUBSTITUTE_ALL);
System.out.println(" resultstr = "+sb.toString());
}catch(Exception e){
e.printStackTrace();
}
}
----------------------
错误定位在int i = Util.substitute(···)这一行。可是很奇怪的时候,编译的时候可以编译过去。运行的时候,再报告java.lang.NoSuchMethodError。
请问谁有解决办法?
问题补充
Jakarta-ORO 2.08的
问题补充:
不仅是编译可以通过,在类里面加main测试都是正常的
ClassPAth就更没有问题,我从来不会把jar丢classpath的
问题补充:
在wen环境中运行
无论测试环境还是部署后
问题补充:
有的时候有些开发工具可能因为缓存等因素造成不能正确发布,故而测试了下载正式的环境,问题依旧
问题补充:
都不可以。。。
为了排除包的问题,我已经把包都删除了。。。我把oro的jar都删除了,直接从apache上down的源码丢工程里面的,运行的时候使用Java Applicaiotn测试都没有问题;如果在web环境运行都不可以,无论是RAD带的WAS5的测试环境还是在其他服务器上单独安装的WAS。。。而且调试的时候提示没有源代码!!!
问题补充:
谢谢大家了
是WAS里面有一个包里面打包了低版本的ORO的原因(IBM把别人的包直接丢自己包里面去了算不算违反license啊???!!!)
问题解决方法也很多:
1)Put jakarta-oro-2.0.8.jar "in front" in the classloader hierarchy: WebSphereConsole-> server -> Process Definitions -> JVM -> set classpath = path_including_jakarta-oro-2.0.8.jar
==因为这边部署环境比较复杂,在有全国各地哦系统跑,不到万不得已不采用这种方式
2)修改Web的类引导优先级:同样修改WAS部署参数。。。暂时不考虑
3)最好被迫使用。。。。自己新建一个类,把两个版本ORO的差异的东西加进去。。。
其实大家都帮我解决问题可,不过答案好像只能给一个人。。。。其他的朋友就有点对不住了哈,分给第一个了