2 つの異なる方法で実行をサポートする war ファイルを実装しています。
- サーブレット コンテナ内 - Tomcat または Jetty にデプロイすることにより。
- 外部サーブレット コンテナー - コマンド プロンプトから実行し、組み込みのサーブレット コンテナーを使用しない。これは、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 で自動化しても失敗すると思います。
ありがとう。