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

时间:2018-02-07 10:23:30

标签: gradle build kotlin build.gradle gradle-kotlin-dsl

最简单的可能是Kotlin hello world for gradle script Kotlin

thufir@dur:~/github/gradleScriptKotlin$ 
thufir@dur:~/github/gradleScriptKotlin$ gradle clean shadowJar;java -jar build/libs/gradleScriptKotlin.jar 

> Task :compileKotlin 
Using Kotlin incremental compilation

> Task :shadowJar 
A problem was found with the configuration of task ':shadowJar'. Registering invalid inputs and outputs via TaskInputs and TaskOutputs methods has been deprecated and is scheduled to be removed in Gradle 5.0.
 - No value has been specified for property 'mainClassName'.
The SimpleWorkResult type has been deprecated and is scheduled to be removed in Gradle 5.0. Please use WorkResults.didWork() instead.


BUILD SUCCESSFUL in 1s
4 actionable tasks: 4 executed
Hello gradle script Kotlin world!
thufir@dur:~/github/gradleScriptKotlin$ 

为简洁起见,请参阅project itself,其中只包含构建文件和kotlin脚本。

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

1 个答案:

答案 0 :(得分:10)

你的意思是胖子吗? 如果是这样,你可以使用shadow gradle插件:

ObservableCollection<Memo> GetMemo(string searchText = null)
    {
        if (string.IsNullOrWhiteSpace(searchText))
            return _memos;

        return _memos.Where(c => c.Title.StartsWith(searchText)) as ObservableCollection<Memo>;

    }

如果你想让jar可执行,你还需要将id 'com.github.johnrengelman.shadow' version '2.0.2' 添加到清单(以下是文件Main-class中包含Applicaion.kt的主方法的示例):

test

使用此功能,您可以使用命令jar { manifest { attributes 'Main-Class': 'test.ApplicationKt' } }

运行jar

下面我列出了简单的例子。档案java -jar <your 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) }

尝试运行jar后:gradle shadowJar

更新2018-02-17

java -jar build/libs/shadow_test-all.jar文件版本:

build.gradle.kts