解决Java中链接[...] class“错误时违反加载程序约束的问题

时间:2009-12-03 14:36:08

标签: java validation myfaces

我是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?

3 个答案:

答案 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是一个常见的罪魁祸首,但还有其他可能性。)