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?。
該問題折騰了大半天,以此記錄爲鑑。