天天看點

jar包沖突問題

問題描述: 在某個linux版本環境下,一台伺服器上執行系統就會報錯,而另一台伺服器執行系統不會報錯。百度了很多解決方案,大體說是由于 servlet-api的jar包沖突,給出的一些方案不能解決問題。

最終解決方案: 

            1、通過檢視錯誤日志或者錯誤提示,确定問題出現的類,比如 *.HttpServletRequest.*: XXXX,那麼HttpServletRequest可能就是導緻問題出現的沖突類。

             2、查找所有包含HttpServletRequest的jar包:                        

./findclass.sh  ./lib HttpServletRequest
           

             3、如果有多個路徑,多次查找,分析查找出來的jar包哪個可能是不需要的,通過删除測試來确定是否解決問題。

findclass.h, 如下:

#!/bin/sh

find_dir=$1
find_key=$2

jars=`find $find_dir -name '*.jar'`
for jar in $jars
do
    ret=`jar tvf $jar | grep $find_key`
    if [ "$?" = "0" ]; then
        echo -e "\e[1;34m${jar}\e[0m: \n\e[2;34m${ret}\e[0m"
    fi
done

wars=`find $find_dir -name '*.war'`
for war in $wars
do
    ret=`jar tvf $war | grep $find_key`
    if [ "$?" = "0" ]; then
        echo -e "\e[1;34m${war}\e[0m: \n\e[2;34m${ret}\e[0m"
    fi
done