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

1

6

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.

Tosch answered 7/2, 2018 at 9:12 Comment(3)
Have you tried the build script from this answer?Roy
In your build script, the Shadow plugin seems not to be applied in the plugins { ... } block, that might be the problem.Roy
the build fails because it can't compile the build.gradle.kts file -- but the error messages aren't that great. see also: https://mcmap.net/q/22088/-could-not-find-kotlin-gradle-plugin-for-kotlin-script-gradle/262852Tosch
F
17

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")
}
Featured answered 16/7, 2018 at 15:29 Comment(1)
Just to give an update for this thread... For the latest version of gradle with Kotlin DSL and johnrengelman.shadow you will need to make some changes to avoid deprecation warnings. From the issue answered by Louis Jacomet: getArchiveFileName() returns a Property<String> which is a mutable object, on which you can invoke Property.set(value) github.com/gradle/gradle/issues/10506#issuecomment-529333401 I used this code: tasks.withType<ShadowJar>() { archiveBaseName.set("app") archiveClassifier.set("...") archiveVersion.set("...") }Ganister

© 2022 - 2024 — McMap. All rights reserved.