kotlin - 如何使用 kotlin dsl 配置 Shadow 插件

标签 kotlin gradle shadowjar

我不知道如何使用 阴影 使用 kotlin DSL 构建的 gradle 中的插件。
所有文档都使用 groovy dsl。
这是 build.gradle.kts 的内容:

import groovy.lang.GroovyObject
import org.gradle.jvm.tasks.Jar

plugins {
    // Apply the Kotlin JVM plugin to add support for Kotlin.
    id("org.jetbrains.kotlin.jvm") version "1.4.10"

    id("com.github.johnrengelman.shadow") version "6.1.0"
    application
}

allprojects {
    repositories {
        // Use jcenter for resolving dependencies.
        // You can declare any Maven/Ivy/file repository here.
        jcenter()
    }
    group = "com.example"
    version = "1.0-SNAPSHOT"
}

dependencies {
    // Align versions of all Kotlin components
    implementation(platform("org.jetbrains.kotlin:kotlin-bom"))

    // Use the Kotlin JDK 8 standard library.
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
}

application {
    mainClass.set("com.example.MainKt")
}


tasks.withType<Jar> {
    manifest {
        attributes(
                mapOf(
                    "ImplementationTitle" to project.name,
                    "Implementation-Version" to project.version)
        )
    }
}

这是 src/main/kotlin/com/example/Main.kt 的内容
package com.example

fun main() {
    println("Hello world")
}
但是当我尝试做 gradle build ,我得到这个错误:
A problem was found with the configuration of task ':shadowJar' (type 'ShadowJar').
> No value has been specified for property 'mainClassName'.
我认为这很奇怪,因为我已经在 application 中输入了应用程序主类。争论。
我试图添加这个:
tasks.withType<ShadowJar>() {
    mainClassName = "com.example.MainKt"
}
但是当我尝试使用此选项进行构建时,它会提示找不到 ShadowJar类型。
  Line 22: tasks.withType<ShadowJar>() {
                          ^ Unresolved reference: ShadowJar
我在这里做错了什么?

最佳答案

问题是我试图添加 mainClassNameShadowJar任务,它应该被添加到 application功能。像这样:

application {
    val name = "com.cognite.ingestionservice.MainKt"
    mainClass.set(name)

    // Required by ShadowJar.
    mainClassName = name
}
mainClassName属性已弃用,但 ShadowJar 从版本 起仍需要该属性6.1.0 .mainClass.set()添加 mainClassName 时不需要,但它在 gradle 6.7 的文档中,所以我还是添加了它。

关于kotlin - 如何使用 kotlin dsl 配置 Shadow 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64612654/

相关文章:

java - IntelliJ IDEA 2016.3.4 gradle如何运行java项目

java - Heroku Java 应用程序在本地崩溃但在网络上没有

Gradle::runtime.exclude group: 'org.apache.hadoop' 影响测试范围吗?

gradle - 当我的应用程序依赖于依赖于不同micronaut版本的lib时,找不到匹配的micronaut-bom变体

java - 如何从 ViewPager (TabLayout) 内的 Activity 动态更改工具栏

android - 如何在 Kotlin 中为菜单项添加点击监听器

generics - 将参数传递给具有多个上限的泛型函数

java - Android Flex布局设置flexBasisPercent?

gradle - jacoco 和 gradle 多模块项目的跨模块代码覆盖率

java - 胖 JAR 的 gradle 替代品是什么?