2

同様の質問では対処できないと思われる問題に直面しています。

SpringMVC、JSP、およびタグライブラリを使用して、Jetty を埋め込むアプリがあります。Maven プラグインを使用して jar を生成し、依存するすべての jar をディレクトリにバンドルして、マニフェストを作成します。

jar (例: java -jar app.jar) を使用してアプリを実行すると、指定する JSP<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>またはその他の taglib をロードしようとするまで、すべて正常に動作します。

java を実行し、コマンド ラインでクラスパスを指定し、メイン クラスに明示的に名前を付けると、すべて機能します。アプリの jar MANIFEST.MF 内の Class-Path が正しいことを確認しました。

これまでのところ、回避したい 2 つの回避策を考え出しました。起動スクリプトでクラスパスを生成し、コマンド ラインに配置します。または、Jetty jsp-api パッケージから .tld ファイルを取り出して、taglibs として指定できる通常のファイルとして使用できるようにします。

私の理解では、Jasper は tld ファイルを探しているすべての Jar のすべてのクラスパスを引き裂くことになっていますか? コマンドラインでjarをクラスパスの一部として指定すると機能しますが、アプリのjarでクラスパスを指定すると失敗します。

4

2 に答える 2

3

解決策を見つけました。Jetty を埋め込んで、それを使用して Web アプリケーションをロードしない場合、標準ではない規則として機能しないことがいくつかあります。tld ファイルを src/main/resources/META-INF/tld に抽出すると、クラスパスが jar で指定されているときに実行時にそれらを見つけることができました。

于 2011-05-17T20:52:50.273 に答える
1

Jetty の詳細とそれがどのように機能するかはわかりませんが、通常は/WEB-INF/libJSTL JAR ファイルをwebapp のフォルダーにドロップするだけで十分です。そこにいますか?

通常の servletcontainer は、%CLASSPATH%環境変数やClass-PathJAR のエントリをスキャンして、webapp 固有の依存関係を検索しません。/WEB-INF/lib代わりに、サーブレット仕様に従って、すべての JAR をロードするだけです。

%CLASSPATH%環境変数は、デフォルトでは、引数または引数なしでコマンドを実行する場合にのみ使用されます。JARのエントリは、引数を使用して問題の JAR を実行する場合にのみ使用されます。しかし、webapp 自体は によって実行されません。サーブレットの仕様に従って、サーブレットコンテナ自体によってロードおよび実行されます。javajavac-cp-classpath-jarClass-Path-jarjava -jar

于 2011-05-16T17:48:53.590 に答える