Multi Vitamin & Mineral

Multi Vitamin & Mineral です。プログラムに関することを書いております。

IntelliJ IDEA の Spring Boot プロジェクトで実行可能モジュール(jar)を生成する

IntelliJ IDEA で Spring Boot の開発をする手順を書きました。

multimineral-tech.com

今回はこの記事の補足記事です。そこから実行可能な本番モジュールとなる Jar ファイルを生成する方法とその実行方法を説明しています。

尚、当該記事の内容は、バージョン 2020.03 を基にしています。

環境とプロジェクトの準備

まずは設定ダイアログを立ち上げましょう。

multimineral-tech.com

こちらの記事のとおりに作成した前提とします。各種バージョンも上記記事を前提とします。

実行モジュールの作成

生成するモジュールは Jar

さて、今回は Spring Boot で Jar ファイルを作成する訳ですが、 Spring Boot 以前はサーブレットコンテナ(Tomcat, WebLogic, WebSphere などなど)に War ファイルを乗せるのが常識でした。

Spring Boot では「面倒だからサーブレットコンテナも含めた Jar ファイルにしちゃおうぜ! んでサーブレットコンテナごと実行できりゃいいでしょ!」という荒業を行っております。なので、今回はその通りに Jar ファイルを生成します。

この、サーブレットコンテナを含めた Jar ファイルを「Fat Jar」などと呼ぶことがあるようですね。

※尚、既にサーブレットコンテナが用意されている場合は War ファイルを生成すればよいと思います&その方法も用意されています。が、今回はその説明は割愛します。

Jar を作成する

IntelliJ IDEA で Gradle プロジェクトをインポートすると、自動で Gradle のプラグインがインストールされます。ウインドウ右側に「Gradle」タブがあるのでここを広げて build を実行します。

  1. ウインドウ右側の「Gradle」タブをクリック
  2. [プロジェクト名] > [Tasks] > [build] > [build] を選択
  3. ここをダブルクリック、もしくは、右クリックで [Run プロジェクト名] をクリックする

build の実行
build の実行

ウインドウ下部にビルド結果が表示されます。「BUILD SUCCESSFUL」と表示されたら成功です。

build の結果
build の結果

ウインドウ左側のエクスプローラより [プロジェクト名] > [build] > [libs] 配下に Jar ファイルが生成されました。

生成された Jar ファイル
生成された Jar ファイル

Jar を実行する

普通の jar ですので、 java -jar (jarファイル) で実行できます。

今回は、 IntelliJ IDEA の Terminal から先程生成された jar を実行しますので、 java -jar build/libs/sample-spring-boot-0.0.1-SNAPSHOT.jar のように打てばOKです。

尚、私の環境ではすでに java コマンドに PATH が通っています。( java --version でバージョン表示されている。)Terminal から java コマンドを打つには事前に設定が必要になりますので、適宜実施しておいてください。

$ java --version
openjdk 15.0.1 2020-10-20
OpenJDK Runtime Environment (build 15.0.1+9-18)
OpenJDK 64-Bit Server VM (build 15.0.1+9-18, mixed mode, sharing)

$ java -jar build/libs/sample-spring-boot-0.0.1-SNAPSHOT.jar

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

2020-12-23 18:16:44.353  INFO 17092 --- [           main] e.s.s.SampleSpringBootApplication        : Starting SampleSpringBootApplication on DESKTOP-LF5VSKB with PID 17092 (C:\Users\hiran\Workspace\intellij\sample-spring-boot\build\libs\sample-spring-
boot-0.0.1-SNAPSHOT.jar started by hiran in C:\Users\hiran\Workspace\intellij\sample-spring-boot)
2020-12-23 18:16:44.356  INFO 17092 --- [           main] e.s.s.SampleSpringBootApplication        : No active profile set, falling back to default profiles: default
2020-12-23 18:16:45.411  INFO 17092 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-12-23 18:16:45.425  INFO 17092 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-12-23 18:16:45.426  INFO 17092 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.37]
2020-12-23 18:16:45.507  INFO 17092 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-12-23 18:16:45.507  INFO 17092 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1094 ms
2020-12-23 18:16:45.712  INFO 17092 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-12-23 18:16:45.894  INFO 17092 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-12-23 18:16:45.903  INFO 17092 --- [           main] e.s.s.SampleSpringBootApplication        : Started SampleSpringBootApplication in 1.984 seconds (JVM running for 2.401)
2020-12-23 18:17:13.004  INFO 17092 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-12-23 18:17:13.005  INFO 17092 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-12-23 18:17:13.010  INFO 17092 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 4 ms

http://localhost:8080 へアクセスすると、 IndexController が起動して返却値がブラウザに表示されます。

参考

参考と言いますか、ここまで書いておいて何ですが、公式サイトにわかりやすく説明されてますね。。。

https://pleiades.io/help/idea/getting-started-with-gradle.html