0

我是 Java 新手,在理解框架抛出的异常时遇到问题。

现在,我正在尝试在一个应用程序中实现一个正则表达式验证器,该应用程序由 Java 5 EE 和 myFaces 1.2 和 Tobago 在 apache tomcat 5.5 中运行。

我遵循了几个教程(包括来自 SUN 的 Java 5 EE tut)并且取得了很大进展。但是,在调用我的 jsp 时,我收到以下错误消息:

java.lang.LinkageError: loader constraints violated when linking javax/faces/validator/Validator class

谁能向我解释我需要做些什么来解决这个问题?

到目前为止,MyFaces 1.1.7 似乎与 TomCat 5.5 存在版本冲突。两者都包含 javax.* 包(其中之一是 javax.faces.validator)。验证器类在包中有不同的版本。相应的 MyFaces 库称为 myfaces-api-1.1.7.jar,TomCat 库称为 javaee.jar。

myfaces 库中包含的 javax 包是 javaee 库中的包的子集。但是...我不能跳过两者中的任何一个,因为该项目将无法启动。

任何提示?

4

3 回答 3

2

这几乎可以肯定是由于您的应用程序拥有自己的副本Validator(在其 JAR 文件之一中),这与服务器自己的副本发生冲突。这可能会导致LinkageError.

找出您的 WAR 或 EAR 的 JAR 文件中的哪个包含它,然后将其删除(连同其余的javax.faces类)。

于 2009-12-03T14:39:37.963 回答
1

听起来像一个类路径问题。检查您的类路径中是否有两个版本冲突的 jar(都包含javax.faces.validator.Validator该类)


根据 MyFaces 主页。Tomcat 配置:Tomcat 5.5.x

一些用户报告了在 Tomcat 5.5.x 中使用 MyFaces 时出现的问题。这是一个简短的指南,希望能帮助您避免遇到同样的问题:-)

如果您使用的是 MyFaces 的二进制版本: MyFaces 已打包,以便与Tomcat 5.0.x一起使用,因此WEB-INF/lib/jsp-2.0.jarWEB-INF/lib/commons-el.jar JAR 文件必须从您的 WAR 文件(包括示例)中删除。

如果您从源代码构建:如果您想从头构建 MyFaces 以使用 Tomcat 5.5.x,您必须将 $MYFACES_HOME/build/build.default.properties 文件中的属性 tomcat.pre.5.5.version 设置为值为假。

于 2009-12-03T14:41:29.890 回答
0

也许您的类路径上有同一个库的两个相互冲突的版本。例如,您可能在 WEB-INF/lib 中有一个 jar 文件,该文件已在 TOMCAT_HOME/lib 中提供。(el-api.jar 是常见的罪魁祸首,但还有其他可能性。)

于 2009-12-03T14:40:14.093 回答