java.lang.ClassNotFoundException:javax.el.E​​xpressionFactory

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ファイルを見つけられることを確認してください。

javax.el.ExpressionFactory

または、次の手順で自分で追加することができます

  1. サーバーインスタンスをダブルクリックします。

  2. 「起動構成を開く」をクリックします。

  3. 「ブートストラップエントリ」にjavaee.jarを追加します。