スポンサーリンク

デプロイ(CD/CI)

SpringBootで実行可能Jarを作る

投稿日:

SpringBootの実行可能Jarとは?

実行可能Jar(Executable Jar)とは、そのJarファイル単体をJavaコマンドで呼び出せばWebアプリケーションが動いてくれるものです。

具体的には、自作のクラス群以外にも、

  • 依存関係(依存するライブラリ・依存するクラス)
  • 設定ファイル
  • Tomcat本体(Webサーバー+Servletコンテナ)

上に3つを含まれていると、Jarファイル単体でWebアプリケーションとして動かすことができます。

SpringBootプロジェクトは、この実行可能Jarを作る機能が組み込まれています。このような実行可能JarはファットJar(Fat、太っちょ)と呼ばれています。

自作したクラス群だけでなく、Tomcat本体なども含むため、自然とサイズが大きめのJarファイルになります。

しかし、そのJarファイルさえあれば、Javaコマンドで実行できるのが大きなメリットです。

実行可能Jarと普通のJarの違い

普通のJarはただのクラス群です。自分で作ったJarであれ、ライブラリとして提供されたJarであれ、それ単体をJavaコマンドで実行しても、Webアプリとして成立することはありません。

例えば、Jarの中に依存関係がなければ、自作のクラス群が参照しているクラスを実行できないため、やはりWebアプリケーションとして起動できません。

例えば、Jarの中にTomcatがなければ、Webアプリケーションとして起動することができません。

WARファイルとの違い

Jarと似ているものにWarという圧縮形式があります。

WarはWeb ARchiveの略です。これは、上記の実行可能Jarのうち、Tomcat本体が含まれていないものです。

Warファイルは、別途用意したサーバー内のTomcatディレクトリのwebappsディレクトリ直下に配置して、Tomcatを起動することで、Webアプリケーションとして実行できるようになります。

SpringBootの実行可能Jarの作り方

Eclipseを使用する場合

ウィンドウ>ビューの表示>その他 を選択する。

Gradle>Gradleタスク を選択する。

Gradleタスクビューの build>bootJarを実行する。

すべて緑のチェックがつけば、成功。

エクスプローラーから、プロジェクトフォルダ内にできた「build>libs」を確認する。

ここでできた、
「プロジェクト名-0.0.1-SNAPSHOT.jar」というのが実行可能Jarです。

コマンドから実行可能Jarを作る場合

コマンドで実行可能Jarを作成する場合、gradle bootJarコマンドを実行します。

> gradle bootJar


gradleが開発環境にインストールされていない場合は、下記例のように、gradlew bootJarが使用できます。

>cd C:\pleiades\workspace\shop-review-api

>gradlew bootJar
BUILD SUCCESSFUL in 4s
4 actionable tasks: 4 executed

>dir
 C:\pleiades\workspace\shop-review-api のディレクトリ

2021/07/11  11:21    <DIR>          .
2021/06/29  14:36    <DIR>          bin
…
2021/07/11  11:21    <DIR>          build
…
2021/06/29  14:46    <DIR>          src
               9 個のファイル              13,957 バイト
               8 個のディレクトリ  147,695,620,096 バイトの空き領域

できたbuildフォルダ>libsフォルダ を見ると、実行可能Jarが生成されています。

SpringBootの実行可能Jarの実行方法

実行可能Jarは任意のディレクトリから、java -jar コマンドで実行できます。

構文

> java -jar [実行可能jarのパス]

>java -jar build/libs/shop-review-api-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.2)

2021-07-11 11:35:03.652  INFO 1828 --- [           main] c.n.shopreview.ShopReviewApiApplication  : Starting ShopReviewApiApplication using Java 15.0.2 on DESKTOP-8J02B7R with PID 1828 (C:\pleiades\workspace\shop-review-api\build\libs\shop-review-api-0.0.1-SNAPSHOT.jar started by edu in C:\pleiades\workspace\shop-review-api)
2021-07-11 11:35:03.659  INFO 1828 --- [           main] c.n.shopreview.ShopReviewApiApplication  : No active profile set, falling back to default profiles: default
2021-07-11 11:35:06.985  INFO 1828 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2021-07-11 11:35:07.022  INFO 1828 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-07-11 11:35:07.024  INFO 1828 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.48]
2021-07-11 11:35:07.216  INFO 1828 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-07-11 11:35:07.217  INFO 1828 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3400 ms
2021-07-11 11:35:08.697  INFO 1828 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2021-07-11 11:35:09.098  INFO 1828 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2021-07-11 11:35:09.159  INFO 1828 --- [           main] c.n.shopreview.ShopReviewApiApplication  : Started ShopReviewApiApplication in 6.802 seconds (JVM running for 7.916)

Udemyのハンズオン動画講座でSpringBootのスキルを磨く!

スポンサーリンク

-デプロイ(CD/CI)

Copyright© 【Spring Hack】 , 2022 All Rights Reserved Powered by AFFINGER5.