2

私は、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 を使用する必要があることです。

4

1 に答える 1

0

サポートされていない tomcat 6 にサーブレット 3.0 を展開している可能性があり、この例外が発生するようです。

追加の可能性は、Tomcat のデフォルト ライブラリに干渉している war 内で追加の .classes をエクスポートすることです。

于 2013-04-23T23:15:21.160 に答える