我是Java的新手,在理解框架抛出的异常时遇到了问题。
现在,我正在尝试将一个正则表达式验证器实现到一个应用程序中,该应用程序包含运行在apache tomcat 5.5中的myFaces 1.2和Tobago的Java 5 EE。
我接受了几个教程(包括来自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。* packages(其中一个是javax.faces.validator)。验证器类在包中具有不同的版本。相应的MyFaces库名为myfaces-api-1.1.7.jar,TomCat库名为javaee.jar。
myfaces lib中包含的javax包是javaee lib中包的子集。但是......我不能同时跳过这两者,因为项目将无法启动。
任何tipps?
答案 0 :(得分:2)
这几乎可以肯定是由于您的应用程序拥有自己的Validator
副本(在其中一个JAR文件中),这与服务器自己的副本发生冲突。这可能导致LinkageError
。
找出你的哪个WAR或EAR的JAR文件包含它,并将其删除(以及其余的javax.faces
类)。
答案 1 :(得分:1)
听起来像是一个类路径问题。检查您的类路径是否有两个版本冲突的jar(都包含javax.faces.validator.Validator
类)
根据MyFaces主页。 Tomcat Config: Tomcat 5.5.x
有些用户报告了问题 将MyFaces与Tomcat 5.5.x一起使用。这里 是一个有希望的简短指南 帮助你不要遇到同样的问题 问题: - )
如果您使用的是二进制版本 of MyFaces:MyFaces是这样打包的 它适用于 Tomcat 5.0.x WEB-INF / lib / jsp-2.0.jar 和 WEB-INF / lib / commons-el.jar 必须从您的中删除 WAR文件(包括示例)。
如果您从源代码构建:如果 你想从头开始构建MyFaces 要使用Tomcat 5.5.x,你必须这样做 设置属性 tomcat.pre.5.5.version中的 $ MYFACES_HOME /编译/ build.default.properties 文件为false。
答案 2 :(得分:0)
也许你的类路径上有两个相同库的冲突版本。例如,您可能在WEB-INF / lib中有一个已在TOMCAT_HOME / lib中提供的jar文件。 (el-api.jar是一个常见的罪魁祸首,但还有其他可能性。)