【问题标题】:Kotlin Gradle include runtime when building jarKotlin Gradle 在构建 jar 时包含运行时
【发布时间】:2021-06-21 08:46:02
【问题描述】:

我正在尝试在使用 gradle 构建我的 jar 时包含 kotlin 运行时。我在网上的任何地方都找不到更新日期线程来说明如何做到这一点。

目前我已经尝试了以下

plugins {
    kotlin("jvm") version "1.5.10"
}

repositories {
    mavenCentral()
}

tasks.withType<KotlinCompile>().configureEach {
    kotlinOptions {
        freeCompilerArgs = freeCompilerArgs + "-include-runtime"
        jvmTarget = "16"
    }
}

这可以很好地构建 jar,但不像我期望的那样包含运行时。如何配置 gradle 来执行此操作?

【问题讨论】:

  • “包含运行时”是什么意思?在生成的 jar 文件中包含 Kotlin 标准库?通常,我们不会将所有内容都放在一个 jar 文件中,而是使用多个 jar 文件。如果您需要将所有依赖项放入一个 jar 中,请搜索创建“fat jar”的插件。
  • 是的,对不起,我是 Kotlin 的新手。我希望在生成的 jar 中包含 stdlib,以便它可以独立使用不使用 Kotlin 的 java 项目
  • 这不是在 Java/Kotlin 世界中包含对库的依赖项的标准方式。如果您使用 Gradle(或 Maven)创建一个库并从另一个 Maven/Gradle 项目中使用它,它将自动为您包含 Kotlin 的 stdlib。但是如果你真的,真的需要将你的库作为一个简单的 jar 文件分发,那么正如我所说 - 你需要创建一个所谓的 fat jar。你应该找到几个可以做到这一点的插件。
  • 您是在创建还是应用程序
  • 使用没有 kotlin 运行时的 jvm 加载到应用程序中的库,因此,我需要捆绑 kotlin 运行时。

标签: kotlin gradle


【解决方案1】:

您可以使用 shadowJar 插件。添加

    id("com.github.johnrengelman.shadow") version "7.0.0"

到您的插件,然后运行 ​​./gradlew shadowJarbuild/lib 中创建一个 jar 文件,其中包含 kotlin 运行时以及您的任何运行时依赖项

【讨论】:

    猜你喜欢
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多