4

我对如何使用 Gradle 创建胖罐子进行了大量研究。但是,我无法弄清楚如何使用 Kotlin DSL 和插件来实现它。我有这个代码:

plugins {
    application
    id("org.openjfx.javafxplugin") version "0.0.9"
    id("com.github.johnrengelman.shadow") version "6.1.0"
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("javax.vecmath", "vecmath", "1.5.2")
    implementation("org.apache.commons", "commons-csv", "1.8")
}

application {
    mainModule.set("de.weisbrja")
    mainClass.set("de.weisbrja.App")
}

javafx {
    modules("javafx.controls")
}

modularity.disableEffectiveArgumentsAdjustment()

但我不知道如何为 fat jar manifest 指定主类。我遵循的教程是这样做的:

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

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

但那是 Groovy DSL 而不是 Kotlin DSL,我对 Kotlin DSL 还不是很熟悉,所以我不知道如何将其转换为 Kotlin DSL。非常感谢帮助。

4

1 回答 1

2

try this vanilla solution in kotlin dsl (build.gradle.kts)

dependencies {
     implementation(group="org.mycomp",name="foo",version="1.0")
}

tasks {
   jar {
       //package org.mycomp.foo inside the .jar file 
       from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
   }
}

alternatively you can use the shadowJar plugin

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

then just run ./gradlew :shadowJar

于 2021-07-17T03:08:28.633 回答