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

如何使用静态编程语言DSL和插件在Gradle中创建胖罐

弓方伟
2023-03-14

我对如何使用Gradle制作胖罐做了很多研究。但是,我无法弄清楚如何使用Kotlin DSL和插件。我有这个代码:

plugins {
    application
    id("org.openjfx.javafxplugin") version "0.0.9"
    id("com.github.johnrengelman.shadow") version "6.1.0"
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("javax.vecmath", "vecmath", "1.5.2")
    implementation("org.apache.commons", "commons-csv", "1.8")
}

application {
    mainModule.set("de.weisbrja")
    mainClass.set("de.weisbrja.App")
}

javafx {
    modules("javafx.controls")
}

modularity.disableEffectiveArgumentsAdjustment()

但是我不知道如何为胖罐子清单指定主类。我遵循的教程是这样做的:

jar {
    manifest {
        attributes "Main-Class": "com.baeldung.fatjar.Application"
    }

    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

但这是Groovy DSL,而不是Kotlin DSL,我还不太熟悉Kotlin的DSL,所以我不知道如何将其转换为Kotlin DSL。非常感谢你的帮助。

共有1个答案

徐涵亮
2023-03-14

试试这个在kotlin dsl(build.gradle.kts)中的香草解决方案

dependencies {
     implementation(group="org.mycomp",name="foo",version="1.0")
}

tasks {
   jar {
       //package org.mycomp.foo inside the .jar file 
       from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
   }
}

或者,您可以使用shadowJar插件

plugins {
    id("com.github.johnrengelman.shadow") version "7.0.0"
}

然后运行/gradlew:shadowJar

 类似资料:
  • 我使用的是Gradle 5.5,我有一个基于Groovy的构建脚本,我正试图将其迁移到Kotlin DSL。任务包含将所有依赖项复制到jar文件的典型行: 我找不到一种方法来把这一行翻译成Kotlin DSL。 让我给你一些背景知识。这是我最初基于Groovy的构建脚本: 这是我基于静态编程语言的构建脚本。它运行良好,除了一行:

  • 我希望Fabric停止在每个构建上生成UUID。过去适用于Gradle的Groovy DSL的东西不适用于较新的静态编程语言DSL。如何使用静态编程语言DSL实现我的目标? (Gradle版本4.10.2,Fabric 1.25.4) 根据Fabric的留档,您可以将以下内容添加到应用的构建脚本中 这是可行的。它防止Fabric在每个调试版本上生成UUID。但是,如果我将构建脚本转换为Kotlin

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D

  • 我希望函数位于类中(不污染全局名称空间),但可以静态访问(从不创建它们所在的对象)。提议的解决办法: 这是一个好的解决方案,还是不可避免地会创建一个对象?我应该使用哪种图案?

  • 我试图在基于静态编程语言的gradle文件中使用以下内容构建一个胖罐子。 但是,胖罐扩展了所有依赖项。我希望将jars按原样包含在/lib目录中,但我无法弄清楚如何实现这一点。 谁能给我一些建议,告诉我如何才能做到这一点? 谢啦