0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gradle を使用して jar ファイルを作成する

Posted at

想定読者

  • gradle の task で jar ファイルを作成する方法を知りたい人

結論

  • 基本的には build task を実行すれば ok

    linux cli
    ./gradlew build
    

ただ、別の task を利用して jar を生成することも可能
以下はそういった別の task も含めた解説

解説

  • jar ファイルの作成には jar, bootJar, build の 3 つの task が利用できる

    jar

    • plain jar を作成する (依存関係 や マニフェストファイルは含まれない)
    • ライブラリとして使用する jar の作成に使用される
    • (jarファイル名)-plain.jar の形式で ./build/libs/ に出力される

    bootJar

    • 実行可能 jar を作成する (全ての依存関係を含み、単独で実行可能)
    • (jarファイル名).jar の形式で ./build/libs/ に出力される

    build

    • plain jar 、及び実行可能 jar を作成する
    • bootJar task と jar task を両方実行したときと同じ結果が得られる

  • そのため、基本的には build task によって jar を生成すれば良い

(補足) plain jar と 実行可能 jar の違いについて

上述の通り、依存関係とマニフェストファイルが含まれているかが異なる

生成された jar ファイルを解凍してディレクトリ構成を確認した結果を以下に示す

plain.jar
root
├─com
│  └─example
│      └─demo2
└─META-INF
実行可能.jar
root
├─BOOT-INF
│  ├─classes
│  │  └─com
│  │      └─example
│  │          └─demo2
│  └─lib
├─META-INF
│  └─services
└─org
    └─springframework
        └─boot
            :
           (略)

差分は以下 2 点である
①META-INF 配下にマニフェストファイルを含むディレクトリが存在する
➁springframework の依存関係が含まれている

Tips

./gradlew task -all から各 task の詳細を確認できる

以下は bootJar と jar の説明を抜粋したもの

linux cli
> ./gradlew task --all

:
bootJar - Assembles an executable jar archive containing the main classes and their dependencies.
:
(中略)
:
jar - Assembles a jar archive containing the classes of the 'main' feature.
:
一方の jar だけが欲しい場合
  • jar task または bootJar を使用する、もしくは build.gradle に以下を記載することで不要な jar が出力されなくなる
build.gradle
jar {
    enabled = false
}

あるいは

build.gradle
bootJar {
    enabled = false
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?