1

私は単純なアプリを持っています...しかし、「hello world」でも例として機能すると考えてください。私はgradle kotlin dslで構築しています。

アプリケーション プラグインを適用し、mainClassName を設定しましたが、取得した唯一の jar (/build/libs 内) にはライブラリが含まれていないため、単に「Java ファイル名」で実行することはできません。実際、なんらかの理由で、まだメイン クラスも指定する必要があります。

しかし、私の本当の質問は、「アーティファクトとしてライブラリ(ファットジャー)を使用してジャーを作成する最も簡単な方法は何ですか?」

アプリケーションプラグインにはそのためのオプションがあると思いましたか?

4

2 に答える 2

1

Gradle Kotlin DSL でそれを行うには、次の 2 つのオプションがあります。

  1. 独自のタスクを作成します。例はGradleのドキュメントに記載されています

    tasks.register<Jar>("uberJar") {
        appendix = "uber"
    
        from(sourceSets.main.get().output)
    
        dependsOn(configurations.runtimeClasspath)
        from({
            configurations.runtimeClasspath.get().filter { it.name.endsWith("jar")}.map { zipTree(it) }
        })
    }
    
  2. シャドウプラグインを使用する

    plugins {
        id("com.github.johnrengelman.shadow") version "4.0.4"
    }
    

    次のように呼び出すことができるshadowJarタスクを追加します:gradle build shadowJarまたはgradle build shadowJar -x testテストをスキップします

    多くの場合、ログを含める必要があります。これは次のように実行できます。

    import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
    import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer
    
    tasks.withType<ShadowJar> {
        // the name of the file will be comprised of the basename and version, e.g. $baseName-$version.jar
        baseName = "shadow"
        transform(Log4j2PluginsCacheFileTransformer::class.java)
    }
    
于 2019-01-29T22:27:45.630 に答える