XP bug 导致的java.lang.NoClassDefFoundError:
在一个项目测试中,本人开发机环境为Windows 7,测试机为Windows XP ,JDK版本都为jdk1.6.0_14,但程序在本人机器运行正常,拿到测试机频繁报出:
Exception in thread "ActiveCheckService-Thread" java.lang.NoClassDefFoundError:
javax/transaction/SystemException
检查不缺少jta-1.1.jar文件,下面是run.bat文件,也没有检查出问题:
@echo off cd ../lib set CLASSPATH=. FOR /R "./" %%F IN (*.jar) DO call :addcp %%~sF
goto extlibe
:addcp set CLASSPATH=%CLASSPATH%;%1 goto :eof
:extlibe echo %classpath% set JAVA_OPTS=%JAVA_OPTS% -Xverify:none -Xms128m -Xmx512m -XX:MaxPermSize=384m -XX:PermSize=256m java MainClass |
1、 检查系统中不缺少jta-1.1.jar文件;
2、 所有jar文件都确实加到了classpath;
3、 其他服务启动正常,只要涉及到jta相关的服务就出问题;
分析:确实是jta相关的类没有加载,为什么没有加载呢?文件系统中存在jta-1.1.jar,并且可以确定jta-1.1.jar没有问题,而且在Windows 7下没有问题,在Windows XP下面就出现了问题,于是想到了classpath,就把两个环境下的classpath对比发现,在Windows 7下没有问题,而在XP下却出现了一下问题:
Windows 7:
…;F:/work/PLMS_W~1/plms/READSE~1/lib/JTA-11~1.JAR;F:/work… |
Windows XP
…;F:/work/PLMS_W~1/plms/READSE~1/lib/JTA-11~1.JARar;F:/work… |
为什么会出现这个问题,其他的jar文件都没有问题,唯独jta-1.1.jar会变成jta-1.1.jarar,最后将jta-1.1.jar修改为jta-1.1.0.jar,问题解决,但为什么会出现这个问题,认为是Xp BUG?。
该问题折腾了大半天,以此记录为鉴。