如何使用gradle脚本Kotlin构建文件构建可运行的ShadowJar?

如何使用gradle脚本Kotlin构建文件构建可运行的ShadowJar?,gradle,build,kotlin,build.gradle,gradle-kotlin-dsl,Gradle,Build,Kotlin,Build.gradle,Gradle Kotlin Dsl,最简单的Kotlin: 为了简洁起见,请参阅,它实际上只包含构建文件和kotlin脚本 如何用gradle脚本Kotlin构建文件构建一个可运行的ShadowJar?你是说fatjar吗? 如果是这样,您可以使用shadow gradle插件: id 'com.github.johnrengelman.shadow' version '2.0.2' 如果您想使jar可执行,还需要将Main类添加到清单中(下面是带有包test的文件application.kt中的Main方法示例): 使用此命令

最简单的Kotlin:

为了简洁起见,请参阅,它实际上只包含构建文件和kotlin脚本

如何用gradle脚本Kotlin构建文件构建一个可运行的ShadowJar?

你是说fatjar吗? 如果是这样,您可以使用shadow gradle插件:

id 'com.github.johnrengelman.shadow' version '2.0.2'
如果您想使jar可执行,还需要将
Main类
添加到清单中(下面是带有包
test
的文件
application.kt
中的Main方法示例):

使用此命令,您可以使用命令运行
jar
java-jar

下面我有一个简单的例子。文件
build.gradle

plugins {
    id 'com.github.johnrengelman.shadow' version '2.0.2'
    id "org.jetbrains.kotlin.jvm" version "1.2.21"
}

repositories {
    jcenter()
}

jar {
    manifest {
        attributes 'Main-Class': 'test.ApplicationKt'
    }
}

dependencies {
    compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    compile("org.simpleframework:simple-xml:2.5")
}
文件
test.Application.kt

package test

import org.simpleframework.xml.Element
import org.simpleframework.xml.ElementList
import org.simpleframework.xml.Root
import org.simpleframework.xml.core.Persister

private val testXml = """
<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>
""".trimIndent()

@Root(name = "feed", strict = false)
data class Feed(
        @field:ElementList(name = "entry", inline = true)
        var entriesList: List<Entry>? = null
)

@Root(name = "entry", strict = true)
data class Entry(
        @field:Element(name = "id")
        var id: String? = null,

        @field:Element(name = "published")
        var published: String? = null
)

fun main(args: Array<String>) {
    println(testXml)

    val serializer = Persister()

    val example = serializer.read(Feed::class.java, testXml)

    println(example)
}

谢谢,非常清楚。然而,我正在寻找一个
build.gradle.kts
文件,而不是上面提到的
build.gradle
plugins {
    id 'com.github.johnrengelman.shadow' version '2.0.2'
    id "org.jetbrains.kotlin.jvm" version "1.2.21"
}

repositories {
    jcenter()
}

jar {
    manifest {
        attributes 'Main-Class': 'test.ApplicationKt'
    }
}

dependencies {
    compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    compile("org.simpleframework:simple-xml:2.5")
}
package test

import org.simpleframework.xml.Element
import org.simpleframework.xml.ElementList
import org.simpleframework.xml.Root
import org.simpleframework.xml.core.Persister

private val testXml = """
<feed>
   <entry>
        <id> someid </id>
        <published> somedate </published>
   </entry>

   <entry>
        <id> someid2 </id>
        <published> somedate2 </published>
   </entry>
</feed>
""".trimIndent()

@Root(name = "feed", strict = false)
data class Feed(
        @field:ElementList(name = "entry", inline = true)
        var entriesList: List<Entry>? = null
)

@Root(name = "entry", strict = true)
data class Entry(
        @field:Element(name = "id")
        var id: String? = null,

        @field:Element(name = "published")
        var published: String? = null
)

fun main(args: Array<String>) {
    println(testXml)

    val serializer = Persister()

    val example = serializer.read(Feed::class.java, testXml)

    println(example)
}
import org.jetbrains.kotlin.gradle.dsl.Coroutines
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.jetbrains.kotlin.jvm") version "1.2.21"
    id("com.github.johnrengelman.shadow") version "2.0.2"
}

repositories {
    jcenter()
}

tasks.withType<Jar> {
    manifest {
        attributes(mapOf(
                "Main-Class" to "test.ApplicationKt"
        ))
    }
}

dependencies {
    compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    compile("org.simpleframework:simple-xml:2.5")
}