当前位置: 首页 > 知识库问答 >
问题:

如何使用kotlin dsl配置影子插件

唐兴发
2023-03-14

我不知道如何在带有kotlin DSL的gradle构建中使用shadow插件。所有文档都使用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 构建时,我收到此错误:

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

我到底做错了什么?

共有2个答案

伏星汉
2023-03-14

我建议在您的简单情况下配置默认的< code>shadowJar和< code>jar任务(不是所有< code>ShadowJar和< code>Jar类型的任务,因为您没有创建其他实例)。

kotlin prettyprint-override">tasks {
    jar {
        manifest {
            attributes(
                mapOf(
                    "Main-Class" to "com.example.MainKt", //will make your jar (produced by jar task) runnable 
                    "ImplementationTitle" to project.name,
                    "Implementation-Version" to project.version)
            )
        }
    }
    shadowJar {
        manifest.inheritFrom(jar.get().manifest) //will make your shadowJar (produced by jar task) runnable
    }
}

application {
    mainClassName = "com.example.MainKt" //will make run & runShadow tasks work. Have no idea why it can't take main class from jar/shadowJar manifests
}

柏明亮
2023-03-14

问题是我试图将<code>mainClassName

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

    // Required by ShadowJar.
    mainClassName = name
}

mainClassName 属性已弃用,但从 6.1.0 版开始,ShadowJar 仍然需要它。

main类。set()在添加<code>mainClassName

 类似资料:
  • 如https://cloud . Google . com/app engine/docs/standard/Java/tools/Gradle-reference上所述,AppEngine Gradle插件提供如下配置: 使用 时,这样的配置应该是什么样子? 我正在查看AppEngine任务,但不明白如何将其连接到适当的Kotlin DSL设置。 编辑 当简单地将上述块添加到<code>buil

  • 我一直在尝试使用Maven Shade插件获取jar,但仍然没有成功。 这是我的项目结构: 模块1(pom.xml): 模块2(pom.xml): 主模块(pom.xml): 根据这段代码,我得到了2个jar文件(Module1-version.jar和Module2-version.jar)。但这不是我想要的。我希望得到1个jar文件(MainModule-version.jar),它将包含另一

  • 问题内容: Jenkins(Hudson)具有StarTeam插件。如何正确配置? 我已经安装了此插件,但是在构建项目时出现此错误: java.lang.NoClassDefFoundError:com / starbase / starteam / Folder 机器是Windows Server2008。我在文件夹中安装了StarTeam SDK 。 问题答案: 在插件文档页面上有一个提示:

  • 新的Android gradle插件(0.7)似乎包括了对NDK的新支持,但在文档中几乎没有提到它(我找到的唯一参考是一个名为< code>ndkSanAngeles的测试)。 看起来gradle正在寻找NDK,我已经将其包含在PATH中。然而,构建项目失败 < li >哪里出错:任务执行失败':ogl tests:compileDefaultFlavorDebugNdk '。NDK未配置 如何在

  • 我的EC2 Ubuntu20.04实例上安装了Jenkins 2.332.3,我正在尝试使用gmail配置电子邮件通知。 我安装了电子邮件扩展插件2.88 扩展电子邮件通知: 电子邮件通知: 我无法再为谷歌/gmail帐户启用“安全性较低的应用访问”,因为谷歌不再提供此设置。而且我没有为谷歌/ gmail帐户启用2FA。 当我选择“测试配置”时,我会收到以下错误: 发送电子邮件失败 javax.m

  • 我有一个多模块项目,所有模块都有一个公共的父pom和一个聚合器/构建pom。我试图使用maven版本插件来更新/设置我所有模块的版本,但它一直跳过子模块。 项目布局:-通用/pom.xml(build pom)-通用/Superpom/pom.xml(父pom)-模块1/pom.xml(模块1 pom)-模块2/pom.xml(模块2 pom) 普通/聚甲醛。xml: 我尝试将插件添加到构建pom