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を使用することを知っていましたか?)
誰でも問題を解決できますか?
1つのプロジェクトで同じ.jar(私の場合はel-api.jar v2.1)を2回持つという問題が発生したため、Tomcat 6を使用してプロジェクトを実行しようとすると、次のエラースタックが発生します。
次に、el-api.jarアーティファクトをprovided
としてマークします(ある場合)。
現在の回避策は、ビルドを実行するたびにel-api.jarを手動で削除し、Tomcat6を使用することです。それから、他のもののために要求されるように、.jarを戻す必要があります。
これを処理するはるかに良い方法は、プロファイル内で依存関係を宣言し、provided
としてマークする(たとえば、「Tomcat6」プロファイルで)か、必要に応じてしないことです。
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は独自の(より新しい)バージョンを使用できました。