kotlin - 从 kotlin 多平台项目创建 fat jar

标签 kotlin jar kotlin-multiplatform fatjar

我最近从旧的 1.2 多平台切换到 1.3。不同之处在于,每个多平台模块只有一个 build.gradle 文件(我有 5 个),因此配置要少得多。
但是,我似乎无法配置创建具有来自 jvm 平台的所有依赖项的可运行胖 jar。
我曾经在我的 jvm 项目和 jar 任务中使用标准的“应用程序”插件,但这不再起作用了。我发现有“jvmJar”任务并对其进行了修改(设置 Main-class),但创建的 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现在,subA在它的 build.gradle 中有你的多平台代码(它是带有 apply :kotlin-multiplafrom 的 gradle 项目)
2.添加另一个子模块
创建另一个仅针对 jvm 的子模块说 subB ,它将具有 gradle 符号 Project:subB所以,subB将有插件:'application''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,甚至可以使用现有的插件,它会起作用

关于kotlin - 从 kotlin 多平台项目创建 fat jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57168853/

相关文章:

android - RecyclerView 中的缩放中心项目

android - MutableLiveData 的变化在显式设置值之前反射(reflect)在观察者中

java - 如何从 fragment 内的 View 持有者调用函数

android - 类里面看到的 Anko

hadoop - 如何以另一个用户身份运行 "hadoop jar"?

java - 如何理解关于可执行jar的spring boot

java - 如何解决 Kotlin 多平台库项目中的 lambda/SAM 问题?

gradle - Kotlin MPP - 在 IntelliJ 上使用 Gradle 构建问题

intellij-idea - 预期的类没有实际声明

java - Gradle 和 Docker : How to run a Gradle build within Docker container?