kotlin 多平台中的依赖关系如何工作?

问题描述 投票:0回答:1

我最近开始了一个基于jetbrains提供的kotlin多平台模板的新项目,结果我很不高兴的是它没有为盒子右侧的终端提供版本。所以我尝试在

terminal
server
旁边添加
composeApp
模块。该模块可以工作,但就目前而言,它是为 java 环境而设计的,想要更改它比我预期的要困难。

实际问题

如何修改项目以将 jvm、Dmg、Msi 和 Deb 目标添加到

terminal
模块。对于我的所有尝试,我设法通过向终端添加多平台插件来添加它们
build.gradle.kts
,但后来我的依赖项没有出现在项目中,并且我正在使用
shared
代码,因此该方法被证明很困难。
build.gradle.kts (:terminal)

plugins {
    alias(libs.plugins.kotlinMultiplatform)
    application
}

group = "pl.game.terminal"
version = "unspecified"

repositories {
    mavenCentral()
}

dependencies {
    implementation(projects.shared)
    testImplementation(libs.kotlin.test.junit)
}

tasks.test {
    useJUnitPlatform()
}

kotlin {
    jvm()
    mingwX64 {
        binaries { 
            executable()
        }
    }
}

application {
    mainClass = "pl.game.terminal.MainKt"
}

整个项目都可以在这里找到,所以你可以自己检查一下。此链接提供对提交的 github 访问,其中存在有效的 java 目标,但未实现多平台。

kotlin gradle kotlin-multiplatform gradle-kotlin-dsl
1个回答
0
投票

您应该包含一个已添加本机目标的分支。如果您只将它们添加到

terminal
,那么这就是您的问题。您的依赖项还需要具有平台目标。但是,请勿添加
binaries
部分。

因此,对于上述情况,共享配置将如下所示:

kotlin {
    @OptIn(ExperimentalWasmDsl::class)
    wasmJs {
    // Wasm stuff
    }

    androidTarget {
    // Yada yada
    }
    
    iosX64()
    iosArm64()
    iosSimulatorArm64()
    
    jvm()

    mingwX64() // <- You need this
    
    sourceSets {
        commonMain.dependencies {
            // put your Multiplatform dependencies here
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.