1. ホーム
  2. java

java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。

2022-02-08 17:48:31

tomcat を起動すると、以下のエラーが発生します。

java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.el.ELContextImpl

java.lang.NoClassDefFoundError: Could not initialize class org.apache.jsp.index_jsp

<! -- <scope>provided</scope>Resolve jar conflicts with tomcat itself when deployed -->
		<! --Introduce Servlet to start -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<! --Introduce end of servlet -->
		<! --Introduce JSTL to start -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>taglibs</groupId>
			<artifactId>standard</artifactId>
			<version>1.1.2</version>
		</dependency>

などのエラー

最初はjarが足りないか、jarの競合かと思いました。EL式でページを実行すると,Could not initialize class org.apache.jasper.el.ELContextImpl というエラーが表示されます.

その後、pom.xml の修正を続け、tomcat 自体が servler と他の jar パッケージを持っていることがわかった。

私はspringbootを使っていて、外部のtomcatを使っているので、pomからspringboot自身のtomcatを除外し、servlerなどのjarパッケージを追加する必要があります。

<! -- activiti -->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring-boot-starter-basic</artifactId>
			<version>6.0.0</version>
			<exclusions>
				<! -- exclude juel-spi, will have conflicts with jars like servlet, jsp, etc. under tomcat -->
				<exclusion>
					<groupId>de.odysseus.juel</groupId>
					<artifactId>juel-spi</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

jarのコンフリクトが発生する可能性が高いです。

いろいろと修正した結果、実はここではtomcatとのjarコンフリクトではないのですが、経験から言うと、どこかでtomcatとのjarコンフリクトが起きているはずです

そこで、大きなプロジェクトが登場します。あらゆるpom依存を試し、削除して再挑戦し、ようやく見つけることができました。

問題は、activitiのワークフロー内で参照されるjarが競合していることです。springbootであろうと、普通のspringmvcプロジェクトであろうと、activiti 6.xを使うなら、juel-spiというものを使うことになります。

プロセスの検索: eclipse 開発ツール ctrl+mouse クリック activiti その依存性、関連する activiti 依存性ページ

次に、Ctrl+マウスでエンジンをクリックします。

最後に、上の丸で囲った画像をクリックすると、紹介文が表示されます。

ここでは、あなたが興味を持っている場合は、中に入るために再びクリックして、多くの、多くのものが内部に導入されていることを確認することができますされません

pomの依存関係がどのように導入されているかを見るには、pomファイルを見る方法をクリックして、赤枠のボタンのメニューバーをクリックするだけでも可能です

第一の解決策: tomcatを7に、activitiを5.xに

2つ目:juel-spiとtomcat自身のjarのコンフリクトを排除する。

2つ目に使ったのは

<! -- activiti -->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring-boot-starter-basic</artifactId>
			<version>6.0.0</version>
			<exclusions>
				<! -- exclude juel-spi, will have conflicts with jars like servlet, jsp, etc. under tomcat -->
				<exclusion>
					<groupId>de.odysseus.juel</groupId>
					<artifactId>juel-spi</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

プロジェクト起動、成功。もうエラー報告はありません。正常なアクセスです。疲れた~このエラーレポートは、アクティヴィティと関連する気配がない

この問題は、他の依存関係が tomcat と競合し、このエラーを報告することを妨げるものではありません。私の場合は、activitiが原因です。