java.lang.ClassNotFoundException: javax.el.ExpressionFactory
問題
TomcatにデプロイされたJava Webアプリケーションは、次のエラーメッセージをヒットします。
javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ExpressionFactory org.apache.jasper.servlet.JspServlet.service(JspServlet.java:268) //... java.lang.ClassNotFoundException: javax.el.ExpressionFactory java.net.URLClassLoader$1.run(URLClassLoader.java:200) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:188) //... javax.servlet.http.HttpServlet.service(HttpServlet.java:717) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
溶液
「javax.el.ExpressionFactory」クラスは「el-api.jar」ライブラリに属しており、Maven中央リポジトリからダウンロードできます。
org.glassfish.web el-impl 2.2
代替ソリューション
場合によっては、「el-api.jar」ファイルが含まれていても、Tomcatは同じエラーメッセージを表示します。 次に、J2EE標準APIライブラリ「javaee.jar」を含めることができます。これには「javax.el.ExpressionFactory」クラスも含まれています。少なくともこれは私にとってはうまくいきます。
Note
この「javaee.jar」は、J2EESDKフォルダーにあります。
Eclipse IDEの場合
デバッグ中の場合は、サーバーインスタンスがjavaee.jar
ファイルを見つけられることを確認してください。
または、次の手順で自分で追加することができます
-
サーバーインスタンスをダブルクリックします。
-
「起動構成を開く」をクリックします。
-
「ブートストラップエントリ」に
javaee.jar
を追加します。