gradle - 如何使用单个 build.gradle 配置向 kotlin 多平台项目添加依赖项

标签 gradle kotlin

我有以下 gradle 模块“计算器”,其 build.gradle文件如下所示。它完美地工作

buildscript {
    ext {
        kotlin_version = "1.2.71"
        coroutines_version = "0.30.1"
    }

    repositories {
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

plugins {
    id 'org.jetbrains.kotlin.multiplatform' version "1.2.71"
}

group 'mpp2-calc'
version '1.1'


kotlin {
    targets {
        fromPreset(presets.jvm, 'jvm') {
            compilations.all {
                tasks[compileKotlinTaskName].kotlinOptions {
                    jvmTarget = '1.8'
                }
            }
        }
        fromPreset(presets.js, 'js') {
            compilations.all {
                tasks[compileKotlinTaskName].kotlinOptions {
                    metaInfo = true
                    outputFile = "${projectDir}/build/classes/main/${project.name}.js"
                    sourceMap = true
                    moduleKind = 'umd'
                    main = 'call'
                }
            }
        }
    }

    sourceSets {
        commonMain {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlin_version"
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutines_version"
            }
        }
        commonTest {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
                implementation "org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version"
            }
        }
        jvmMain {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
            }
        }
        jvmTest {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version"
                implementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
            }
        }
        jsMain {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib-js:$kotlin_version"
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$coroutines_version"
            }
        }
        jsTest {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-test-js:$kotlin_version"
            }
        }
    }
}

repositories {
    maven { url = 'https://dl.bintray.com/russhwolf/multiplatform-settings' }

    google()
    jcenter()
}

它是一个多平台库,针对jvm和js平台。

我有另一个模块“someapp”,即 build.gradle 看起来也是这样
buildscript {
    ext.kotlin_version = '1.2.71'

    repositories {
        maven { url 'http://dl.bintray.com/kotlin/kotlin-eap' }
        mavenCentral()
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: "application"

group 'mpp2'
version '1.1'

mainClassName = "com.asofttz.someapp.indexKt"

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    api project(":calculator") // doesn't seem to show any effect
}

我的 settings.gradle 看起来像这样
rootProject.name = 'mpp2'
include ':calculator'
include ':someapp'

现在,我想将使用 gralde 的计算器模块的 jvm 平台目标添加到 someapp 项目而不发布到 maven。有人可以帮我怎么做吗?我似乎停留在这一点上,我想继续使用这种类型的配置

额外的问题:
假设我在计算器模块中添加了一个 android 目标,如何将它作为依赖项添加到 android 项目中?

最佳答案

您的配置没有任何问题,只需将您的 kotlin 版本提升到 1.3.0以上。也可以使用 gradle 版本 4.6以上。

要更改您的 gradle 版本,只需进入文件 gradle/wrapper/gradle-wrapper.properties更改distributionUrldistributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip .

一切就绪,同步并开始调试

关于gradle - 如何使用单个 build.gradle 配置向 kotlin 多平台项目添加依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53137108/

相关文章:

java - 将 LibGdx 与 Google Play Services/BaseGameUtils (Gradle) 结合使用时出现错误

android - Kotlin 与 Android : Base classes and Kotlin Android Extensions

java - 如何在不记住密码的情况下以编程方式连接到 Wifi?

android - Gradle 错误 : More than one variant of project :myModule matches the consumer attributes after upgrading to new Google Services

android - 依赖项未添加到 POM 文件 - Android Gradle Maven 发布

java - 通过 UI Automator 查看器中的资源 ID 识别 espresso 中的元素

kotlin - 内联RowMapper <T>调用JdbcTemplate.query(String !, RowMapper <T!> !, vararg Any!)

java - 在 Kotlin 中使用 BufferedReader 的最佳方式

java - 升级Android项目以使用java 8并超出GC开销限制

gradle - Spring Boot JPA H2 控制台未运行,application.properties 文件被忽略