English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

spring Bootをリモートサーバーのtomcatにパッケージ化してデプロイする

前書き

Spring Bootプロジェクトは通常、内蔵のTomcatやJettyサーバーで実行されます。外部のサービスコンテナにWARパッケージでデプロイすることは稀ですが、Linuxに置いても、一般的にはApplicationクラスを直接起動しますが、外部のサーバーにデプロイする必要がある場合があります。これはSpring Bootにとって少し厄介です。

もう少し話は省略して、詳細な紹介を見てみましょう。

環境宣言:

jdk:1.8

サーバー:阿里云、ubuntu 164

springBoot:1.5.9.RELEASE

目的

Spring BootをリモートサーバーのTomcatにパッケージ化する。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>waibao</グループID>
 <artifactId>project</アーティファクトID>
 <バージョン>1-SNAPSHOT</バージョン>
 <packaging>war</packaging>
 <parent>
  <グループID>org.springframework.boot</グループID>
  <アーティファクトID>spring-boot-starter-parent</アーティファクトID>
  <バージョン>1.5.9.RELEASE</バージョン>
 </parent>
 <properties>
  <java.version>1.8</java.version>
 </properties>
 <dependencies>
  <dependency>   <groupId>org.springframework.boot</グループID>
   <アーティファクトID>spring-boot-starter-web</アーティファクトID>
  </dependency>  
  <!-- 移除tomcat的支持,改成编译时支持 -->
  <dependency>   <groupId>org.springframework.boot</グループID>
   <アーティファクトID>spring-boot-starter-tomcat</アーティファクトID>
   <scope>provided</scope>
  </dependency>
  <dependency>   <groupId>org.mybatis.spring.boot</グループID>
   <artifactId>mybatis<-spring-boot-starter</アーティファクトID>
   <バージョン>1.3.1</バージョン>
  </dependency>
  <!--非严格模式 -->
  <dependency>   <groupId>org.springframework.boot</グループID>
   <アーティファクトID>spring-boot-starter-thymeleaf</アーティファクトID>
  </dependency>
  <!-- 配置thymeleaf的非严格模式,需要该依赖-->
  <dependency>   <groupId>net.sourceforge.nekohtml</グループID>
   <artifactId>nekohtml</アーティファクトID>
   <バージョン>1.9.22</バージョン>
  </dependency>
  <dependency>   <groupId>org.springframework.boot</グループID>
   <アーティファクトID>spring-boot-starter-jdbc</アーティファクトID>
  </dependency>
  <dependency>   <groupId>org.mybatis.spring.boot</グループID>
   <artifactId>mybatis<-spring-boot-starter</アーティファクトID>
   <バージョン>1.3.1</バージョン>
  </dependency>
  <dependency>   <groupId>org.springframework.boot</グループID>
   <アーティファクトID>spring-boot-starter-test</アーティファクトID>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>mysql</グループID>
   <artifactId>mysql<-connector-java</アーティファクトID>
   <バージョン>6.0.6</バージョン>
  </dependency>
  <!-- 阿里连接池-->
  <dependency>
   <groupId>com.alibaba</グループID>
   <artifactId>druid</アーティファクトID>
   <バージョン>1.1.5</バージョン>
  </dependency>
  <!-- fastJson -->
  <dependency>
   <groupId>com.alibaba</グループID>
   <artifactId>fastjson</アーティファクトID>
   <バージョン>1.2.40</バージョン>
  </dependency>
  <!-- 热部署-->
  <dependency>   <groupId>org.springframework.boot</グループID>
   <アーティファクトID>spring-boot-devtools</アーティファクトID>
   <バージョン>1.5.9.RELEASE</バージョン>
   <optional>true</optional>
   <scope>true</scope>
  </dependency>
 </dependencies>
 <build>
  <finalName>/testweb</finalName>
  <プラグインズ>
   <プラグイン>    <グループID>org.apache.maven.plugins</グループID>
    <アーティファクトID>maven-war-プラグイン</アーティファクトID>
    <バージョン>2.4</バージョン>
    <configuration>
     <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
   </プラグイン>
  </プラグイン>
 </build>
</project>

注意

1、maven 插件不能使用springBoot自带的插件。我使用这个插件报以下错误

Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar (default-jar) on project project: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-jar-plugin:2.6:jar: java.lang.ExceptionInInitializerError: null

mavenプラグインを変更してください}}

<プラグイン>
  <groupId>org.apache.maven.plugins</グループID>
  <アーティファクトID>maven-war-プラグイン</アーティファクトID>
  <バージョン>2.4</バージョン>
  <configuration>
   <failOnMissingWebXml>false</failOnMissingWebXml>
  </configuration>
</プラグイン>

注意が必要です。web.xmlを持っていないため、追加で以下を追加しました

<configuration>  <failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>

2、

<build>
 <finalName>xxx</finalName>
</build>

finalNameはapplication.ymlのcontextと一致する必要があります-パスが一致する必要があります。

3、tomcatの依存関係をコンパイル時のものに変更する必要があります

<dependency>   <groupId>org.springframework.boot</グループID>
   <アーティファクトID>spring-boot-starter-tomcat</アーティファクトID>
   <scope>provided</scope>
  </dependency>

4、springBootエントリークラス、SpringBootServletInitializerを継承し、オーバーライド

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  return application.sources(MainApplication.class);
 }

MainApplication.classはspringBootのエントリークラスです。

パッケージ化

プロジェクトのルートディレクトリに移動してください。IDEAを使用している場合は、以下のように入力してください:

mvn clean package -DskipTests

パッケージ化が完了すると、プロジェクトのtargetフォルダに対応する.warファイルが生成されます。

アップロード

warファイルをtomcatのwebappsフォルダに直接配置してください。

まだ解決していない問題:

最初は直接jarパックにまとめたいと思っていました。しかし、mavenプラグイン部分でエラーが発生し、jarパックにできずにwarパックにまとめ、tomcatにアップロードしました。

この問題を解決した人がいたら、教えてください。

この記事では、これはバグだと言っています...

https://issues.apache.org/jira/ブラウズ/MSITE-724

更新。。。。

問題は解決しました。springBootを直接Jarにパッケージし、実行することができます。

原因:

<プラグインズ>
 <プラグイン>
  <グループID>org.springframework.boot</グループID>
  <アーティファクトID>spring-boot-maven-プラグイン</アーティファクトID>
 </プラグイン>
</プラグイン>

springBootが提供する公式例では、このプラグインを使用しています。

Mavenは自動的にダウンロードします 2.4 バージョンおよび 2.6バージョンの maven-jar-プラグイン。

であり、Mavenはデフォルトで依存関係を持っています 2.6バージョン。。最初はプロジェクトが報告するエラーが、maven-jar-プラグイン 2.6jar が互換性がないため、常にエラーが見つかりませんでした。。

つまり 2.6バージョンが互換性がない。手動で変更することで解決できます 2.4バージョンを指定してください。以下の通りです:

<プラグインズ>
   <プラグイン>    <グループID>org.springframework.boot</グループID>
    <アーティファクトID>spring-boot-maven-プラグイン</アーティファクトID>
   </プラグイン>
   <プラグイン>    <グループID>org.apache.maven.plugins</グループID>
    <アーティファクトID>maven-jar-プラグイン</アーティファクトID>
    <バージョン>2.4</バージョン>
   </プラグイン>
</プラグイン>

まとめ

これでこの記事のすべての内容が終わりました。この記事の内容が皆様の学習や仕事に参考になることを願っています。何か疑問があれば、コメントを残してください。皆様の支持に感謝します。

声明:本文の内容はインターネットから収集され、著作権者に帰属します。コンテンツはインターネットユーザーにより自発的に貢献し、アップロードされました。本サイトは所有権を持ちません。また、人工編集は行われていません。著作権侵害を疑われる内容がある場合は、メールを送信してください:notice#oldtoolbag.com(メールを送信する際には、#を@に置き換えてください。告発を行い、関連する証拠を提供してください。一旦確認が取れましたら、本サイトは即座に侵害を疑われる内容を削除します。)

おすすめ