gradle kotlin dsl 的“API”在哪里?

gradle where is "API" for kotlin dsl?

提问人:livkonrol 提问时间:11/1/2022 最后编辑:livkonrol 更新时间:11/2/2022 访问量:1646

问:

如何在 kotlin dsl 中编写此代码?

dependencies{
  api'org.slf4j:slf4j-api:1.7.25'
}

我找不到在 kotlin dsl 中更改 groovy “api”(在依赖项块中)所需的内容。 例如,我想使用 org.slf4j,我想像 API 一样声明它,但我检查了迁移文档,发现类比仅用于实现、编译等。我使用intellij想法。

我试过了这个:

plugins {
    id("java")
}

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

repositories {
    mavenCentral()
}

dependencies {
    api("org.slf4j:slf4j-api:1.7.36")
}

但是说:“未解析的引用:api”

我检查了一下:https://docs.gradle.org/current/userguide/migrating_from_groovy_to_kotlin_dsl.html https://docs.gradle.org/current/userguide/kotlin_dsl.html

Kotlin kotlin-dsl

评论

0赞 aSemy 11/2/2022
您在哪里看到消息“未解决的引用”?是 IntelliJ,还是从命令行运行时出现错误?您是否在 IDE 中加载了 Gradle 项目?docs.gradle.org/current/userguide/...... jetbrains.com/help/idea/......./gradle assemble

答:

2赞 Tenfour04 11/1/2022 #1

语法应为 。api("org.slf4j:slf4j-api:1.7.25")

您需要使用插件,而不仅仅是访问“api”配置,无论您的脚本是在 Groovy 还是 Kotlin 中。java-libraryjava

评论

0赞 livkonrol 11/1/2022
我想学习 Kotlin,这就是为什么我也想在 gradle 脚本中使用它。我提供的代码是针对时髦的 dsl。但是当我在 kotlin dsl 中尝试“api(”org.slf4j:slf4j-api:1.7.25“)” 时,它无法编译。它说“未解析的引用:api”。同时,其他 kotlin dsl 函数工作正常。
0赞 livkonrol 11/2/2022
我用我的 .kts 内容更新了帖子
0赞 Tenfour04 11/2/2022
替换为 以使其可用。即使在 Groovy 文件中也是必需的。您也可以使用用反引号包围的裸调用(它是一个合成的 Kotlin 属性)。或者,如果你想在这个项目中使用 Kotlin,你可以用 替换整行。id("java")id("java-library")apijava-librarykotlin("jvm") version "1.7.20"
0赞 livkonrol 11/2/2022
java-library有帮助!我不知道。我想要java,所以我保留了java库,它工作正常!谢谢。
1赞 Islam Assem 11/1/2022 #2

在 build.gradle.kts 应用模块文件中

在文件末尾添加

dependencies {
    implementation(kotlin("stdlib-jdk8", "1.4.30"))
    api("org.slf4j:slf4j-api:1.7.25")
}

当然不需要添加实现行,它只是为了使用 stdlib 等 Kotlin 库实现的示例用法

此外,在 App Settings.gradle.kts 中,您需要添加存储库

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven("https://dl.bintray.com/kotlin/kotlin-eap")
        maven("https://plugins.gradle.org/m2/")
    }
}

或者你可以将它添加到你的项目 build.gradle.kts 中

buildscript {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven("https://dl.bintray.com/kotlin/kotlin-eap")
        maven("https://plugins.gradle.org/m2/")
        maven("https://jitpack.io")
    }
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30")
        classpath("com.android.tools.build:gradle:7.0.2")
        classpath("de.mannodermaus.gradle.plugins:android-junit5:1.7.0.0")
        classpath("org.jetbrains.dokka:dokka-gradle-plugin:1.5.30")
    }
}

allprojects {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven("https://dl.bintray.com/kotlin/kotlin-eap")
        maven("https://plugins.gradle.org/m2/")
        maven("https://jitpack.io")
    }
}

也使用 java-library 代替 java

apply plugin: 'java-library'

评论

0赞 livkonrol 11/1/2022
当我在 kotlin dsl 中尝试“api(”org.slf4j:slf4j-api:1.7.25“)” 时,它无法编译。它说“未解析的引用:api”。同时,其他 kotlin dsl 函数工作正常。
0赞 Joffrey 11/1/2022
@livkonrol这些函数实际上是某些配置的名称(用 Gradle 术语来说)。可用的配置取决于您添加的插件,因此请确保您应用了与 Groovy 中相同的插件。如果仍有问题,请发布重现问题的完整构建脚本
0赞 Islam Assem 11/1/2022
@livkonrol您似乎缺少存储库,但我认为您的库在 mavenCentral 中,我更新了答案并添加了存储库
0赞 livkonrol 11/2/2022
谢谢你的建议。我用我的 .kts 内容更新了我的帖子。关于您对存储库的建议,但其他依赖项工作正常(我的意思是,如果我使用 implementation/compileOnly/etc,它们可以正常工作。 只有 API 配置不起作用)。