Tomcat、JDK和Web应用程序之间的关系是什么?

5

以下是最近我提出的问题:org.apache.commons.codec.digest.Md5Crypt.md5Crypt函数在Linux下抛出异常,在Windows下却正常

虽然最终我解决了这个问题,但我仍然感到困惑。是什么导致了这种情况发生?

我的JDK版本为1.7,Tomcat版本为7,我的Web应用程序是由JDK 1.7编译的,commons-codec.jar的版本是1.10,然后就抛出了一个异常。

java.lang.IllegalAccessError: tried to access method org.apache.commons.codec.digest.DigestUtils.getMd5Digest()Ljava/security/MessageDigest; from class org.apache.commons.codec.digest.Md5Crypt

当我将Tomcat从7更改为8时,它工作得很好。为什么?Tomcat对应用程序做了什么?

你确定两个Tomcat都在使用Java 7吗? - Keval
是的,我确定这一点。两个Tomcat都在使用JAVA_HOME。 - Anson .K
1个回答

2
我强烈建议,问题没有得到解决是因为你使用了 tomcat 8 而不是 7,但它被解决是因为你的 Java 构建路径中存在冲突,这意味着你在运行时有两个不同版本的 commons-codec JAR,可能其中一个存在于你的 tomcat 7 lib 文件夹中。

你可以检查之前的构建路径来确认或驳斥我的说法! - QuakeCore
我之前已经检查过了!我正在使用Maven来管理JAR包,我确定只有一个commons-codec JAR包。而且Tomcat是新下载的。 - Anson .K
你说得对,我发现WEB-INF/lib文件夹中的第三方jar文件包含了一个不同的commons-codec,并且它没有被maven管理,所以我无法通过maven依赖找到它。我删除了这个糟糕的jar文件,现在一切都正常了。现在我可以说“我解决了这个问题”,对吧?谢谢! - Anson .K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接