ホームページ >Java >&#&チュートリアル >SpringBoot を war パッケージにパッケージ化して Tomcat または wildfly で実行する方法
springboot のデフォルトのパッケージ化方法は jar パッケージです。jar パッケージの利点は、設定を変更する必要がないことと、tomcat が埋め込まれていることです。jar パッケージにパッケージ化されている場合は、直接 docker に放り込むことができますテストを実行します。ただし、フロントエンド コードは war パッケージにのみパッケージ化できることを考慮すると、バックエンド コードを war パッケージにパッケージ化して、Tomcat コンテナ内の Web アプリでフロントエンド コードと一緒に実行するだけで十分です。
SpringBoot パッケージ形式
デフォルトでは、作成された SpringBoot プロジェクトは jar パッケージ形式でパッケージ化されます。同時に、Tomcat コンテナーが組み込まれています。
では、springboot を war パッケージにパッケージ化して、wildfly などのコンテナーにデプロイしたい場合は、どうすればよいでしょうか?
以下、プロジェクトの作成から順に説明していきます。
プロジェクトの作成
プロジェクトの作成に難しいことはありません。アイデア ツールを使用して簡単な Maven プロジェクトを作成するだけです。プロジェクトが既に Springboot プロジェクトである場合は、それを変更したい場合は、war パッケージの形式になっているので、比較して変更するだけです。
pom.xml 構成の変更
プロジェクトの作成後、pom.xml ファイルを変更し、親タグを追加します。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> </parent>
元々が springboot プロジェクトだった場合は、すでに組み込まれているため、変更する必要はありません。
pom.xml のパッケージ化メソッドを war に設定します。
<packaging>war</packaging>
次のように依存関係構成を追加または変更します。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
spring-boot- starter - Tomcat への依存関係を Web から除外する必要があります。同時にservlet-apiの依存関係を追加します。ここで追加される依存関係は Servlet2.5 であることに注意してください。
パッケージ化にはビルドで次のプラグインを使用します。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
メイン メソッドの開始
開始するメイン メソッドが既にある場合は、メイン メソッドに SpringBootServletInitializer を継承させ、そのメソッドを実装します。新規作成プロジェクトの場合は、以下のようにしてSpringBootApp(スタートアップクラス)を最上位ディレクトリに直接作成し、diamを起動します。
@SpringBootApplication public class SpringBootApp extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SpringBootApp.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(SpringBootApp.class); } }
Packaging
maven コマンドでパッケージのパッケージ化を実行するだけで、ターゲット ディレクトリに war パッケージが生成されます。
Tomcat と Wildfly のデプロイメントに関しては、対応するディレクトリに war パッケージを配置してサービスを開始できます。
例外
起動中に次のような例外が発生した場合 (web.xml が見つからないというプロンプトが表示されます):
WAR のアセンブル中にエラーが発生しました: webxml属性が必要です (更新モードで実行している場合は既存の WEB-INF/web.xml)
pom ファイル パッケージ化プラグインと Tomcat の問題が解決されているかどうかを確認し、上記の条件が満たされているかどうかを確認してください。プラグインのパッケージ化は正しいです。
問題の理由は、依存関係パッケージ spring-boot-starter-web が springboot プロジェクトで参照されていることです。このパッケージで参照されている spring-boot-starter-tomcat には、Tomcat 埋め込みサーブレット コンテナーが含まれており、その異なるバージョンは異なるサーブレット バージョン仕様を実装します。
サーブレット/JSP バージョン 2.5/2.1 は Tomcat バージョン 6.0.x をサポートしており、Java の最小バージョンは 1.5 です。サーブレット/JSP バージョン 3.0/2.2 は Tomcat バージョン 7.0.x をサポートし、Java の最小バージョンは 1.6 です。
上記ではServlet2.5を使用しているため、web.xmlファイルが存在しない場合には上記の例外が発生します。
解決策 1: サーブレットのバージョンが 3 未満の場合、/src/main/webapp/WEB-INF/web.xml ファイルを使用して作成します。
解決策 2: pom.xml のビルドの下に maven-war-plugin プラグインを追加します。そして、failOnMissingWebXml を false に設定します。
以上がSpringBoot を war パッケージにパッケージ化して Tomcat または wildfly で実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。