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