提问人:livkonrol 提问时间:11/1/2022 最后编辑:livkonrol 更新时间:11/2/2022 访问量:1646
gradle kotlin dsl 的“API”在哪里?
gradle where is "API" for kotlin dsl?
问:
如何在 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
答:
2赞
Tenfour04
11/1/2022
#1
语法应为 。api("org.slf4j:slf4j-api:1.7.25")
您需要使用插件,而不仅仅是访问“api”配置,无论您的脚本是在 Groovy 还是 Kotlin 中。java-library
java
评论
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")
api
java-library
kotlin("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 配置不起作用)。
评论
./gradle assemble