首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从kotlin多平台项目创建fat jar

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

Stack Overflow用户
提问于 2019-07-23 16:48:20
回答 4查看 2.8K关注 0票数 7

最近,我从原来的1.2多平台转换为1.3。不同的是,每个多平台模块有一个build.gradle文件(我有5个),所以配置要少得多。但是,我似乎无法配置使用jvm平台中的所有依赖项创建可运行的胖jar。我曾经在我的jvm项目和jar任务中使用标准的"application“插件,但这不再起作用了。我发现有"jvmJar“任务,我修改了它(设置主类),但是创建的jar不包含依赖项和ClassNotFoundException上的崩溃。我该怎么做呢?

这就是我现在拥有的:

代码语言:javascript
复制
    jvm() {
        jvmJar {
            manifest {
                attributes 'Main-Class': 'eu.xx.Runner'
            }
            from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
        }

    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-27 11:19:16

我确实撞到了那个肿块,还利用了这份工作。

1.重组你的项目

让我们将您的项目称为Project

创建另一个子模块,例如subA,它将具有gradle符号Project:subA

现在,subA在它的build.gradle中有了您的多平台代码(它是带有apply :kotlin-乘的gradle项目)。

2.增加另一个子模块

创建另一个只针对jvm的子模块,比如subB,它将具有分级表示法Project:subB

因此,subB将有插件:'application''org.jetbrains.kotlin.jvm'

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

代码语言:javascript
复制
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,甚至使用现有的插件,它也会工作。

票数 3
EN

Stack Overflow用户

发布于 2019-12-17 07:28:19

让它使用kotlin 1.3.61中的多平台插件:

以下内容适用于src/jvmMain/kotlin/com/example/Hello.kt中的主文件

Hello.kt还必须将其包指定为package com.example

我以这种方式配置了jvm目标:

代码语言:javascript
复制
kotlin {
    targets {
        jvm()

        configure([jvm])  {
            withJava()
            jvmJar {
                manifest {
                    attributes 'Main-Class': 'com.example.HelloKt'
                }
                from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
            }
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-04-10 09:27:06

让它与luca992所做的稍微修改的版本一起工作:

代码语言:javascript
复制
kotlin {
jvm() {
    withJava()
    jvmJar {
        manifest {
            attributes 'Main-Class': 'sample.MainKt'
        }
        from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    }
}
...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57168853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档