私は、Eclipse内で意図したとおりに完全に機能するMavenプロジェクトを持っています。また、Eclipse の外部でビルドして実行しますが、フロントエンド (JSP Web ページ) を呼び出そうとすると、次のようになります。
/ へのアクセスに問題があります。理由:
javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor;
のせいで:
java.lang.NoSuchMethodError: javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor; ...
調べてみたところ、このメッセージは Servlet 2.5 と Servlet 3.0 の間の非互換性に関連しているようです。しかし、私はすでに pom の依存関係として Servlet 3.0 を持っています:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
そのため、ビルド自体は成功しているにもかかわらず、Eclipse の外部でビルドおよびデプロイするときに、必要なこの依存関係が含まれていない理由がわかりません。
これを引き起こしている可能性のあるものと、それを修正する方法はありますか?
編集: JSP アクセスは web.xml で構成されていません。index.jsp ファイルは、次のスニペットを含む jetty サーバー用のウェルカム ファイル セットです。
// configure webapp
WebAppContext webroot = new WebAppContext();
webroot.setResourceBase("src/main/webapp");
webroot.setContextPath("/");
webroot.setWelcomeFiles(new String[] {"index.jsp"});
webroot.setParentLoaderPriority(true);
server.setHandler(webroot);
残りのいくつかの jsp ファイルは、webapp フォルダーにあります。
編集 2: プロジェクトをパッケージ化するときに作成された jar の内容を調べたところ、jar に javax/servlet/Servlet.class の複数のコピーがあるようです。これは少し当惑します。pom にあるこれらの他の依存関係 (以下にリスト) は、追加の Servlet.class ファイルを追加する必要があると想定しています。
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8.v20121106</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>8.1.8.v20121106</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jsp</artifactId>
<version>8.1.8.v20121106</version>
</dependency>
しかし、私はこれを修正する方法がわかりません...
誰かアイデアがあれば、ぜひ聞いてみたいです。私が持っている唯一の実際の制約は、jetty 8.1.8.v20121106 を使用する必要があることです。