Gradleでファットジャーを作る

1概要

この簡単な記事では、Gradleで「太い瓶」を作成する方法について説明します。

基本的に、** fat jar(別名uber-jar)は、アプリケーションを実行するために必要なクラスと依存関係の両方を含む自己完結型アーカイブです。

2初期設定

2つの依存関係を持つJavaプロジェクト用の単純な build.gradle ファイルから始めましょう。

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'
}

3 JavaプラグインからのJarタスクの使用

Java Gradleプラグインから jar タスクを変更することから始めましょう。

デフォルトでは、このタスクは依存関係のないjarを生成します。

数行のコードを追加することでこの動作を上書きできます。それを機能させるには2つのことが必要です。

  • マニフェストファイルの Main-Class 属性

  • 依存関係のjarファイルを含める

Gradleタスクにいくつか修正を加えましょう。

jar {
    manifest {
        attributes "Main-Class": "com.baeldung.fatjar.Application"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

4個別のタスクを作成する

元のjarタスクをそのままにしたい場合は、同じ仕事をする別のものを作成できます。

次のコードは__customFatJarという新しいタスクを追加します。

task customFatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': 'com.baeldung.fatjar.Application'
    }
    baseName = 'all-in-one-jar'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

5専用プラグインを使う

太いjarファイルを作成するために既存のGradleプラグインを使用することもできます。

この例ではhttps://github.com/johnrengelman/shadow[Shadow]プラグインを使用します。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
    }
}

apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'

Shadowプラグインを適用すると、 shadowJar タスクが使えるようになります。

6. 結論

このチュートリアルでは、Gradleで太い瓶を作成するいくつかの異なる方法を紹介しました。デフォルトのjarタスクをオーバーライドし、個別のタスクを作成してシャドウプラグインを使用しました。

どのアプローチが推奨されますか?答えは - それは異なります。

単純なプロジェクトでは、デフォルトのjarタスクを上書きするか、新しいものを作成すれば十分です。しかし、プロジェクトが大きくなるにつれて、プラグインを使用することを強くお勧めします。外部META-INFファイルとの競合など、より困難な問題をすでに解決しているからです。

いつも通り、このチュートリアルの完全な実装はhttps://github.com/eugenp/tutorials/tree/master/gradle[over on GitHub]にあります。

  • «** 前へ

前の投稿:ダイジェスト認証付きRestTemplate
次の投稿:グアバのEventBusガイド