web-dev-qa-db-ja.com

ローダー制約違反

1つのプロジェクトで同じ.jar(私の場合はel-api.jar v2.1)を2回持つという問題が発生したため、Tomcat 6を使用してプロジェクトを実行しようとすると、次のエラースタックが発生します。

WARNING: Unexpected error forwarding to login page
javax.servlet.ServletException: Java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/Apache/jasper/servlet/JasperLoader) of the current class, org/Apache/jsp/login_jsp, and the class loader (instance of org/Apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature

 at Java.lang.Thread.run(Thread.Java:619)
Caused by: Java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/Apache/jasper/servlet/JasperLoader) of the current class, org/Apache/jsp/login_jsp, and the class loader (instance of org/Apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature

http://blog.springsource.com/2008/10/20/understanding-the-osgi-uses-directive/ を見つけました

しかし、ソリューションはプロジェクトの多くの部分に影響を与えるため、これは役に立ちません。

Tomcatに変更を加えることはできません。プロジェクトは他の多くのユーザーによって使用されます。

現在の回避策は、ビルドを実行するたびにel-api.jarを手動で削除し、Tomcat6を使用することです。それから、他のもののために要求されるように、.jarを戻す必要があります。

Maven 2とMaven 3を使用して構築しています。 (ところで、誰もがJrubyでMaven3を使用することを知っていましたか?)

誰でも問題を解決できますか?

19
Javabeginner

1つのプロジェクトで同じ.jar(私の場合はel-api.jar v2.1)を2回持つという問題が発生したため、Tomcat 6を使用してプロジェクトを実行しようとすると、次のエラースタックが発生します。

次に、el-api.jarアーティファクトをprovidedとしてマークします(ある場合)。

現在の回避策は、ビルドを実行するたびにel-api.jarを手動で削除し、Tomcat6を使用することです。それから、他のもののために要求されるように、.jarを戻す必要があります。

これを処理するはるかに良い方法は、プロファイル内で依存関係を宣言し、providedとしてマークする(たとえば、「Tomcat6」プロファイルで)か、必要に応じてしないことです。

17
Pascal Thivent

Tomcat 7でSpring(3.0.5)サンプルmvc-ajaxを実行しようとすると、このエラーが発生しました。

Tomcat 7はel-api 2.2およびjsp-api 2.2を使用します。 mvc-ajax pomファイルはjsp-api 2.1を指定します。これにはel-apiのクラスも含まれています。

これを実行するには、pomからjsp-api 2.1をコメントアウトしました。これにより、Tomcatは独自の(より新しい)バージョンを使用できました。

6
Jim Sime