我尝试使用ShadowJar gradle插件将我的ktor应用程序打包到胖罐子中。但由于shadowJar
任务,我每次都得到几乎空的jar。它只包含清单(正确设置了主类)。
渐变配置(groovy):
import org.gradle.jvm.tasks.Jar
buildscript {
ext.kotlin_version = '1.3.72'
ext.ktor_version = '1.3.2'
ext.serialization_version = '0.20.0'
ext.sl4j_version = '1.6.1'
repositories { jcenter() }
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:5.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}
}
plugins {
id 'org.jetbrains.kotlin.multiplatform' version '1.3.61'
}
apply plugin: 'kotlinx-serialization'
apply plugin: 'application'
apply plugin: 'java'
mainClassName = 'com.example.JvmMainKt'
apply plugin: 'com.github.johnrengelman.shadow'
repositories {
mavenCentral()
jcenter()
}
group 'com.example'
version '0.0.1'
apply plugin: 'maven-publish'
kotlin {
jvm {
}
js {
browser {
}
nodejs {
}
}
// For ARM, should be changed to iosArm32 or iosArm64
// For Linux, should be changed to e.g. linuxX64
// For MacOS, should be changed to e.g. macosX64
// For Windows, should be changed to e.g. mingwX64
mingwX64("mingw") {
binaries {
executable {
// Change to specify fully qualified name of your application's entry point:
entryPoint = 'main'
// Specify command-line arguments, if necessary:
runTask?.args('')
}
}
}
sourceSets {
commonMain {
dependencies {
implementation kotlin('stdlib-common')
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serialization_version"
implementation "io.ktor:ktor-client-core:$ktor_version"
}
}
commonTest {
dependencies {
implementation kotlin('test-common')
implementation kotlin('test-annotations-common')
}
}
jvmMain {
dependencies {
implementation kotlin('stdlib-jdk8')
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:$serialization_version"
implementation "io.ktor:ktor-serialization:$ktor_version"
implementation "io.ktor:ktor-server-netty:$ktor_version"
implementation "org.slf4j:slf4j-simple:$sl4j_version"
}
}
jvmTest {
dependencies {
implementation kotlin('test')
implementation kotlin('test-junit')
}
}
jsMain {
dependencies {
implementation kotlin('stdlib-js')
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-js:$serialization_version"
}
}
jsTest {
dependencies {
implementation kotlin('test-js')
}
}
mingwMain {
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serialization_version"
}
}
mingwTest {
}
}
}
shadowJar {
mainClassName = 'com.example.JvmMainKt'
mergeServiceFiles()
}
我终于找到了解决问题的办法。
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
//...
task shadowJar2(type: ShadowJar) {
def target = kotlin.targets.jvm
from target.compilations.main.output
def runtimeClasspath = target.compilations.main.runtimeDependencyFiles
manifest {
attributes 'Main-Class': mainClassName
}
configurations = [runtimeClasspath]
}
我过去也遇到过同样的问题,对我来说(groovy gradle)有效的语法是:
shadowJar {
mergeServiceFiles()
manifest {
attributes 'Main-Class': 'com.example.JvmMainKt'
}
}
报告工作的groovy代码是: 这将如何翻译成Kotlin DSL?我尝试了许多变体,其中一些编译和运行,但不创建所需的输出。可运行的罐子。
我的KMP Jetpack Compose项目中继续出现Gradle配置错误 配置项目:共享时出现问题。 找不到名为“testApi”的配置。 我的设置是: Android Studio北极狐狸2020.3.1金丝雀3 项目级别设置 注意:通过删除一部分一部分的配置,我似乎发现问题似乎是围绕着android配置本身,所以如果我删除android()部分 只要简单的jvm()就可以了
说明 用于创建平台商家和门店 请求地址 http://api.dc78.cn/Api/sys_newaccount 请求方式 POST 请求参数 参数 参数名称 描述 pid 商家账号 英文、数字组成,不少于4位,不能重复 name 商家名称 addrcode 省市区地址编码 三级编码,参见说明http://www.mca.gov.cn/article/sj/tjbz/a/2017/201801/
此接口用于代理商调用创建果盘平台商家账号。 支持创建独立商家账号和添加连锁账号子门店,使用issub=1来标识创建子门店。调用添加子门店前必须先调用创建第一个门店。 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 sys_newaccount string post POST参数组 是 object └pi
1.1.1. 目录 1.1.2. 一、技能信息 1.1.3. 二、语音交互 1.1.4. 三、配置后端服务 1.1.5. 四、集成发布 1.1.1. 目录 本文将讲解如何在Rokid技能平台上快速地创建一个自定义技能。 一、技能信息 二、语音交互 自定义语音交互 预定义语音交互 三、配置后端服务 本地技能 云端技能 四、测试发布 添加测试设备 SSML语音调试 后端服务测试 1.1.2. 一、技能