2017-01-22 3 views
8

Как я уже говорил, я хотел бы знать, как изменить gradle.build.kts, чтобы иметь задачу создать уникальный jar со всеми зависимостями (включая kotlin lib).Как создать толстую банку с градиентом kotlin скрипта

Я нашел этот образец в Groovy:

//create a single Jar with all dependencies 
task fatJar(type: Jar) { 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Jar File Example', 
      'Implementation-Version': version, 
      'Main-Class': 'com.mkyong.DateUtils' 
    } 
    baseName = project.name + '-all' 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
    with jar 
} 

Но я понятия не имею, как я мог бы написать, что в Котлин, кроме:

task("fatJar") { 

} 

ответ

4

Вы можете использовать ShadowJar plugin построить жир jar:

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar 

buildscript { 
    repositories { 
     mavenCentral() 
     gradleScriptKotlin() 
    } 
    dependencies { 
     classpath(kotlinModule("gradle-plugin")) 
     classpath("com.github.jengelman.gradle.plugins:shadow:1.2.3") 
    } 
} 

apply { 
    plugin("kotlin") 
    plugin("com.github.johnrengelman.shadow") 
} 

repositories { 
    mavenCentral() 
} 

val shadowJar: ShadowJar by tasks 
shadowJar.apply { 
    manifest.attributes.apply { 
     put("Implementation-Title", "Gradle Jar File Example") 
     put("Implementation-Version" version) 
     put("Main-Class", "com.mkyong.DateUtils") 
    } 

    baseName = project.name + "-all" 
} 

Просто запустите задачу с помощью «shadowJar».

ПРИМЕЧАНИЕ: Предполагается, что вы используете GSK 0.7.0 (последний по состоянию на 13.02.2012).

+0

Не работает, в первой строке 'импорта com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar',' ShadowJar' нерешенным .. – elect

+0

Вы пробовали мой ответ поскольку? Я тестировал и работал. Я думаю, что исходная проблема заключалась в том, что() требуется класс расширения. – mbStavola

+0

Я попробовал это снова [прямо сейчас] (http://imgur.com/qUozPd2), в 'tasks' он говорит' [DELEGATE_SPECIAL_FUNCTION_MISSING] Отсутствует метод getValue (Build_gradle, KProperty <*>) 'для делегата типа TaskContainer! '' – elect

6

Вот версия, которая не использует плагин, больше похожа на версию Groovy.

import org.gradle.jvm.tasks.Jar 

val fatJar = task("fatJar", type = Jar::class) { 
    baseName = "${project.name}-fat" 
    manifest { 
     attributes["Implementation-Title"] = "Gradle Jar File Example" 
     attributes["Implementation-Version"] = version 
     attributes["Main-Class"] = "com.mkyong.DateUtils" 
    } 
    from(configurations.runtime.map({ if (it.isDirectory) it else zipTree(it) })) 
    with(tasks["jar"] as CopySpec) 
} 

tasks { 
    "build" { 
     dependsOn(fatJar) 
    } 
} 

Also explained here

+3

Это действительно работает – s1m0nw1

+1

Он не шутит. Это должно быть добавлено где-то в https://github.com/gradle/kotlin-dsl/tree/master/samples –

Смежные вопросы