当前位置: 首页 > 知识库问答 >
问题:

用Kotlin Gradle DSL从ktor Kotlin多平台项目创建脂肪罐

杜凯
2023-03-14

报告工作的groovy代码是:

kotlin {
jvm() {
    withJava()
    jvmJar {
        manifest {
            attributes 'Main-Class': 'sample.MainKt'
        }
        from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
    }
}
...
}

这将如何翻译成Kotlin DSL?我尝试了许多变体,其中一些编译和运行,但不创建所需的输出。可运行的罐子。

共有1个答案

姜博
2023-03-14

我花了3天时间试图让脂肪罐工作,下面是解决方案,在解决方案之前,下面是澄清:

我早先犯的错误

  • 不应该匆忙进入docker,应该先让fat jar在本地工作。
  • with java()被遗漏了,这是36个工时的主要浪费...WTF是这个函数的点吗?
  • Dependson(build):我不明白为什么jar任务类型不知道这一点。
  • main.CompileDependencyFiles:我曾经用它来代替下面的map from参数。
  • main.output.classesdirs:在其他解决方案中缺少,似乎包含了您的实际代码。
  • 科特林1.3.72
  • 等级6.5
  • Ktor 1.3.2

代码:

//Import variables from gradle.properties
val environment: String by project
val kotlinVersion: String by project
val ktorVersion: String by project

//Build File Configuration
plugins {
    java
    kotlin("multiplatform") version "1.3.72"
}

group = "com.app"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    jcenter()
    jcenter {
        url = uri("https://kotlin.bintray.com/kotlin-js-wrappers")
    }
    maven {
        url = uri("https://jitpack.io")
    }
}

//Multiplatform Configuration
kotlin {
    jvm {
        withJava()
        compilations {
            val main = getByName("main")
            tasks {
                register<Jar>("buildFatJar2") {
                    group = "application"
                    dependsOn(build)
                    manifest {
                        attributes["Main-Class"] = "com.app.BackendAppKt"
                    }
                    from(configurations.getByName("runtimeClasspath").map { if (it.isDirectory) it else zipTree(it) }, main.output.classesDirs)
                    archiveBaseName.set("${project.name}-fat2")
                }
            }
        }
    }
    js {
        browser {

        }
    }
    sourceSets { SKIPPED FOR LENGTH }
}

我希望这节省了某人3天,让我知道如果你发现改进(我还在学习)。Kotlin,gradle,multiplatform,Docker...所有这些都很难处理,他们需要并行更新文档,否则jetbrains就注定要失败。

    null
 类似资料:
  • 我有一个使用spark的scala多项目,并尝试使用sbt插件sbt-assembly 0.14.3来制作一个胖罐子。我的建筑。SBT看起来像这样: 我想创建一个子项目的fat jar,以便这个fat jar包含项目核心的所有库和代码。我尝试了以下方法:

  • 我正在用Spring Boot,Jpa和MySQL连接器编写java控制台应用程序。我怎样才能轻松地排除所有不必要的脂肪从我的脂肪罐?

  • 我知道不是一个有效的阶段,但我只是想说明我试图完成什么,即只有在提供选项时才构建fat jar的条件安装。

  • 我使用JarSplice创建了一个胖jar文件,但是当我启动它时,我得到一个窗口(大小可以),它在半秒后关闭。。。 在“addjars”部分中,我添加了从Eclipse导出的jar文件,以及我正在使用的所有库jar。在本机部分,我只为lwjgl添加Windows本机。我想我写了正确的主类。 我做错了什么?我怎样才能解决这个问题? 注意:我使用的是最新版本的eclipse和jdk。

  • 我将Gradle用于一个简单的Java项目,并希望生成一个fat JAR,其中还包含源代码。 我准备了一个示例存储库:https://github.com/szarnyasg/gradle-shadowjar-source.我尝试了这个配置: 我可以通过以下方式构建此功能: 这将在目录中生成两个JAR文件: -没有源的胖JAR -一个(仅)包含源的JAR Gradle Shadow插件的文档说明

  • 我在Java 8应用程序中使用了处理,它在IntelliJ上运行良好。Gradle导出所有平台的fat jar(下面的代码)打包依赖项后出现问题: 每当我试图打开扩展PApplet的窗口时,它都会引发以下异常: 通用域名格式。约甘普。opengl。GLException:配置文件[GL4bc、GL4、GL3bc、GL3、GLS3、GL2、GLS2]在设备窗口GraphicsDevice[type.