gradlebuildkotlingradle-kotlin-dslshadowjar

how to import the ShadowJar plugin for Kotlin (Gradle) builds?


Build failed:

thufir@dur:~/NetBeansProjects/kotlin_dsl$ 
thufir@dur:~/NetBeansProjects/kotlin_dsl$ gradle clean run 

> Configure project : 
e: /home/thufir/NetBeansProjects/kotlin_dsl/build.gradle.kts:4:12: Unresolved reference: github


FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'kotlin_dsl'.
> Could not open cache directory 74ykawxta6db3b2bfk9grjikp (/home/thufir/.gradle/caches/4.3.1/gradle-kotlin-dsl/74ykawxta6db3b2bfk9grjikp).
   > Internal error: unable to compile script, see log for details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
thufir@dur:~/NetBeansProjects/kotlin_dsl$ 

problematic import statement:

thufir@dur:~/NetBeansProjects/kotlin_dsl$ 
thufir@dur:~/NetBeansProjects/kotlin_dsl$ cat build.gradle.kts 

import org.gradle.api.JavaVersion
import org.gradle.kotlin.dsl.*
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar


plugins {
    application
    kotlin("jvm") version "1.1.51"
}

application {
    mainClassName = "samples.HelloWorldKt"
}

dependencies {
    compile(kotlin("stdlib"))
}

repositories {
    jcenter()
}


thufir@dur:~/NetBeansProjects/kotlin_dsl$ 

removing the import for Shadow as described gives a clean build and run. How is the Shadow plugin JAR made available for Kotlin to import?

Gradle itself, using the DSL, creates Shadow JAR's fine.

Coming at this from a different angle:

Kotlin meets Gradle: gradle.build.kt with ShadowJar

with a working build file.


Solution

  • Like so:

    import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
    import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
    
    plugins {
        kotlin("jvm") version "1.5.21"
        id("com.github.johnrengelman.shadow") version "7.0.0"
    }
    
    group = "xxx.yyy"
    version = "1.0-SNAPSHOT"
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation(kotlin("stdlib-jdk8"))
    }
    
    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "11"
    }
    
    tasks.withType<ShadowJar> {
        archiveFileName.set("app.jar")
    }