从 kotlin 多平台项目创建 fat jar

2024-05-02

我最近从旧的 1.2 多平台切换到 1.3。不同之处在于,每个多平台模块都有一个 build.gradle 文件(我有 5 个),因此配置少了很多。 但是,我似乎无法配置使用 jvm 平台的所有依赖项创建可运行的 fat jar。 我曾经在 jvm 项目和 jar 任务中使用标准“应用程序”插件,但这不再起作用。我发现有“jvmJar”任务,我修改了它(设置主类),但创建的 jar 不包含依赖项,并且在 ClassNotFoundException 上崩溃。我该怎么做?

这就是我现在所拥有的:

    jvm() {
        jvmJar {
            manifest {
                attributes 'Main-Class': 'eu.xx.Runner'
            }
            from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
        }

    }

我确实遇到了这个问题并使用了这个解决方案。

1. 重组你的项目

让我们调用您的项目Project.

创建另一个子模块说subA,其中将有 gradle 符号Project:subA

now, subA在其 build.gradle 中包含您的多平台代码(它是带有 apply :kotlin-multiplafrom 的 gradle 项目)

2. 添加另一个子模块

创建另一个仅针对 jvm 的子模块subB,其中将有 gradle 符号Project:subB

So, subB将有插件:'application' and 'org.jetbrains.kotlin.jvm'

3. 将模块添加为 gradle 依赖项(请参阅我的 build.gradle)

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.31'
    id "application"
}

apply plugin: "kotlinx-serialization"

group 'tz.or.self'
version '0.0.0'

mainClassName = "com.example.MainKt"

sourceCompatibility = 1.8

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

dependencies {
    implementation project(':subA')
}

您可以像常规 java 项目一样继续构建 subB,甚至使用现有的插件,它会起作用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 kotlin 多平台项目创建 fat jar 的相关文章

随机推荐