2009-12-03 85 views
0

我是Java新手,遇到了解框架拋出異常的問題。解決Java中鏈接[class]錯誤時違反的加載器約束問題

現在,我正試圖將一個正則表達式驗證器實現爲一個包含Java 5 EE和myFaces 1.2以及多巴哥在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 lib中包含的javax包是javaee lib中包的子集。然而......我不能跳過這兩者,因爲那時項目將無法開始。

任何tipps?

回答

2

這幾乎肯定是由於您的應用程序擁有其自己的副本Validator(在其JAR文件之一中)造成的,並且這與服務器自己的副本衝突。這可能會導致LinkageError

找出哪些WAR或EAR的JAR文件包含該文件,並將其刪除(以及其餘的javax.faces類)。

+0

我相信我發現了異常的來源,但是,我不知道如何解決這個問題。 在Eclipse的庫下,我可以看到帶有包含javax.faces.validator包的大量javax包的庫javaee.jar的Apache Tomcat v5.5。另外,我可以看到帶有庫myfaces-api-1.1.7.jar的JSF MyFaces 1.1,其中包含一些包含javax.faces.validator包的javax包。 我該如何解決這個問題,因爲我相信我需要這兩個庫,如果不打破我的項目,就不能刪除一個庫? – Mephisztoe 2009-12-03 15:44:28

+0

如果Tomcat將javax.faces作爲其庫的一部分,那麼它應該包含完整的實現,並且您的應用程序不需要myfaces-api-1.1.7.jar – skaffman 2009-12-03 15:50:29

+0

刪除myfaces-api-1.1.7當webapp啓動時,.jar立即導致UnsupportedOperationException異常: java.lang.UnsupportedOperationException/javax.faces.context.FacesContext.getELContext(FacesContext.java:137) – Mephisztoe 2009-12-03 16:30:12

0

也許你的類路徑中有相同庫的兩個衝突版本。例如,您可能在TOMCAT_HOME/lib中已經提供的WEB-INF/lib中有一個jar文件。 (el-api.jar是常見的罪魁禍首,但還有其他可能性。)

1

聽起來像是類路徑問題。檢查您的類路徑與版本衝突兩瓶(均包含了javax.faces.validator.Validator類)


按照MyFaces的主頁。 Tomcat Config: Tomcat 5.5.x

一些用戶已經使用的MyFaces和Tomcat 5.5.x.時 報告的問題這裏 是,希望能 幫助你不:-)

如果您正在使用的MyFaces的二進制版本 運行到同一 問題的簡短說明:MyFaces的包裝,以便 ,它的工作原理與的Tomcat 5.0。 X所以 的WEB-INF/lib目錄/ JSP-2.0.jarWEB-INF/lib目錄/公地el.jar JAR文件必須從 WAR文件(包括示例)被移除

如果您要從源生成:如果 你想從頭開始構建 的MyFaces和Tomcat的5.5.x工作,你必須 設置在 $ MYFACES_HOME財產 tomcat.pre.5.5.version/build/build.default.properties 文件的值爲false。

+0

正如skaffman的回覆中評論的那樣,我發現了jar:javaee.jar和myfaces-api-1.1.7.jar。我只是不知道如何解決衝突,因爲我需要兩個... – Mephisztoe 2009-12-03 15:49:16

+0

檢查擴展答案也許這適用於你 – jitter 2009-12-04 19:28:19

+0

在WEB-INF/lib下我沒有jsp-2.0.jar和commons-el.jar。但是,我有另一個目錄包含我的項目中包含的庫。 MyFaces目錄包含一個commons-el.jar文件,但不包含jsp-2.0.jar文件。包含的TomCat庫包含一個jsp-api.jar。但是,我不明白的是,commons和jsp都不包含任何javax.faces.validator包。 – Mephisztoe 2009-12-07 10:32:46