ホームページ  >  記事  >  Java  >  SpringBoot を war パッケージにパッケージ化して Tomcat または wildfly で実行する方法

SpringBoot を war パッケージにパッケージ化して Tomcat または wildfly で実行する方法

WBOY
WBOY転載
2023-05-10 17:04:061589ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。