0

2 つの異なる方法で実行をサポートする war ファイルを実装しています。

  1. サーブレット コンテナ内 - Tomcat または Jetty にデプロイすることにより。
  2. 外部サーブレット コンテナー - コマンド プロンプトから実行し、組み込みのサーブレット コンテナーを使用しない。これは、war ファイルの一部としてサポートされる必要があります。

#2を満たすには、Spring Boot Loaderコンポーネントがより適切であることがわかりました。Mavenと統合する前に、手動で使用してみました。このドキュメントに記載されている「WARファイル構造」のセクションに従いました。セクション「WAR ファイル構造」を参照してください。

次の手順に従いました。warファイルを作成しました。それを解凍し、すべてのスプリング ブート ローダー クラス ファイルをそのルートに追加しました。war を実行可能にするために、マニフェスト ファイルに適切なエントリを追加しました。次に、それを圧縮し、名前を元の war ファイルに戻しました。コマンド - Java -jar mywar.war で実行すると、次の例外で失敗しました:

java.lang.IllegalStateException: Unable to open nested compressed entry WEB-INF/lib/spring-core-3.1.2.RELEASE.jar
    at org.springframework.boot.loader.jar.JarFile.getNestedJarFileFromFileEntry(JarFile.java:330)
    at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:305)
    at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:87)
    at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:74)
    at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:78)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:52)
    at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:79)

特定のjarだけでなく、すべてのjarファイルに対してエラーが発生しています。上記の手順を Maven で自動化しても失敗すると思います。

ありがとう。

4

1 に答える 1

1

基になる ZIP ファイル形式にはいくつかの制限があり、WarLauncherネストされた圧縮アーカイブからリソースをロードすることができなくなります。ただし、WAR ファイルをビルドしていた場合は、その手順をやり直し、ネストされた JAR が圧縮されていないことを確認する必要があります。その後、動作するはずです。(また、Maven WAR ビルドのデフォルト設定を使用する場合も機能します。)

于 2013-11-27T10:12:48.967 に答える