最近,我从原来的1.2多平台转换为1.3。不同的是,每个多平台模块有一个build.gradle文件(我有5个),所以配置要少得多。但是,我似乎无法配置使用jvm平台中的所有依赖项创建可运行的胖jar。我曾经在我的jvm项目和jar任务中使用标准的"application“插件,但这不再起作用了。我发现有"jvmJar“任务,我修改了它(设置主类),但是创建的jar不包含依赖项和ClassNotFoundException上的崩溃。我该怎么做呢?
这就是我现在拥有的:
jvm() {
jvmJar {
manifest {
attributes 'Main-Class': 'eu.xx.Runner'
}
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
}发布于 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)
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,甚至使用现有的插件,它也会工作。
发布于 2019-12-17 07:28:19
让它使用kotlin 1.3.61中的多平台插件:
以下内容适用于src/jvmMain/kotlin/com/example/Hello.kt中的主文件
Hello.kt还必须将其包指定为package com.example
我以这种方式配置了jvm目标:
kotlin {
targets {
jvm()
configure([jvm]) {
withJava()
jvmJar {
manifest {
attributes 'Main-Class': 'com.example.HelloKt'
}
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
}
}
}发布于 2020-04-10 09:27:06
让它与luca992所做的稍微修改的版本一起工作:
kotlin {
jvm() {
withJava()
jvmJar {
manifest {
attributes 'Main-Class': 'sample.MainKt'
}
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
}
}
...
}https://stackoverflow.com/questions/57168853
复制相似问题