标签: gradle-kotlin-dsl

如何在build.gradle.kts和kotlin中使用JUnit 5?

  • Java版本 java 10.0.1 2018-04-17
  • Kotlin版 1.2.41
  • Gradle版本 4.7

如果我们可以使用拼图模块系统会更好

java gradle kotlin junit5 gradle-kotlin-dsl

7
推荐指数
1
解决办法
1748
查看次数

未解决的参考:Gradle Kotlin DSL的sourceSets

尝试将现有内容迁移build.gradle到Kotlin,并且在我的项目中遇到以下错误:

Script compilation error:

  Line 86:         from(sourceSets["main"].allSource)
                        ^ Unresolved reference: sourceSets

1 error
Run Code Online (Sandbox Code Playgroud)

subprojects当我尝试定义sourcesJar任务时,错误来自我的代码块:

subprojects {
    val sourcesJar by tasks.registering(Jar::class) {
        classifier = "sources"
        from(sourceSets["main"].allSource) // error here
    }

    configure<PublishingExtension> {
        publications {
            register("mavenJava", MavenPublication::class) {
                from(components["java"])
                artifact(sourcesJar.get())
            }
        }
    }

    val implementation by configurations
    val compileOnly by configurations
    val annotationProcessor by configurations

    dependencies {
        implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
        implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
        implementation("org.jetbrains.kotlin:kotlin-reflect")
        compileOnly("org.springframework.boot:spring-boot-autoconfigure")
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下内容:

  • 摇篮4.10.2
  • 科特林1.2.70

build.gradle.ktsbefore subprojects块的开始部分:

import com.diffplug.gradle.spotless.KotlinExtension
import com.diffplug.gradle.spotless.SpotlessExtension
import …
Run Code Online (Sandbox Code Playgroud)

gradle gradle-kotlin-dsl

7
推荐指数
1
解决办法
2182
查看次数

为什么我无法使用 Gradle Kotlin DSL (5.0) 访问 build.gradle.kts 的“插件”部分中的项目属性?

Gradle 5.0、Kotlin DSL

创建gradle.properties文件:

kotlinVersion=1.3.10
Run Code Online (Sandbox Code Playgroud)

创建build.gradle.kts文件:

val kotlinVersion: String by project

println(kotlinVersion) // works

plugins {
    kotlin("jvm").version(kotlinVersion)
    //                    ^ Unresolved reference: kotlinVersion

}

repositories {
    jcenter()
}

tasks.register("compute") {
    doLast {
        println(kotlinVersion) // works
    }
}
Run Code Online (Sandbox Code Playgroud)

运行gradle compute,然后更改

kotlin("jvm").version(kotlinVersion)
Run Code Online (Sandbox Code Playgroud)

kotlin("jvm").version("1.3.10")
Run Code Online (Sandbox Code Playgroud)

然后再次运行。一切正常。

我只是做错了什么吗?或者这是某种限制或错误?

我只是想将 Kotlin 版本移出构建脚本,这样我就可以稍后更改它(例如通过命令行... -PkotlinVersion=1.3.0),并保持依赖项和插件相同。

gradle kotlin build.gradle gradle-kotlin-dsl

7
推荐指数
1
解决办法
3025
查看次数

为什么我不能在 Plugins {} 中使用 val?

val kotlinVersion = "1.3.72"
plugins {
    // Error: 'val kotlinVersion: String' can't be called in this context by implicit receiver. Use the explicit one if necessary
    kotlin("jvm").version(kotlinVersion)]
}
Run Code Online (Sandbox Code Playgroud)

我也使用 Kotlin 的标准库作为依赖项,我只想在一个地方指定版本,但是当我尝试像上面在 build.gradle.kts 中所做的那样时,我收到了您在评论中看到的错误。我该如何解决这个问题?

kotlin gradle-kotlin-dsl

7
推荐指数
1
解决办法
1535
查看次数

gradle kts 文件中的 applyNativeModulesAppBuildGradle(project) 和 applyNativeModulesSettingsGradle

我正在使用 Gradle KTS 文件并尝试设置 React Native。我无法添加

应用NativeModulesAppBuildGradle(项目)

applyNativeModulesAppBuildGradleKTS有什么替代方案吗?另外在设置上,我们必须写applyNativeModulesSettingsGradle

android kotlin react-native gradle-kotlin-dsl

7
推荐指数
1
解决办法
2027
查看次数

Android Gradle Kotlin Dsl 中未解决的参考问题

我将我的 gradle 文件从 groovy 迁移到 kotlin dsl。一切正常,但从另一个 kotlin 文件将值导入到 gradle 时出现问题。我可以导入变量并且自动完成工作正常,但是当我构建项目时,它给了我未解决的参考错误。感谢任何帮助。

摇篮版本:7.1.1

Android 工作室:北极狐

我在 buildSrc 下创建的 build.gradle.kts :

plugins {
    `java-gradle-plugin`
    `kotlin-dsl`
    `kotlin-dsl-precompiled-script-plugins`
}

repositories {
    mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)

我从 buildSrc/src/main/java/Dependency 导入的文件:

object Versions {
    const val compose_version = "1.0.0"
}

object Dependencies {
    const val compose_ui = "androidx.compose.ui:ui:${Versions.compose_version}"
    const val compose_material = "androidx.compose.material:material:${Versions.compose_version}"
    const val compose_ui_tooling_preview = "androidx.compose.ui:ui-tooling-preview:${Versions.compose_version}"
    const val compose_ui_tooling = "androidx.compose.ui:ui-tooling:${Versions.compose_version}"
    const val compose_ui_test = "androidx.compose.ui:ui-test-junit4:${Versions.compose_version}"
}
Run Code Online (Sandbox Code Playgroud)

应用程序 build.gradle.kts 文件:

plugins {
    id("com.android.application")
    kotlin("android")
} …
Run Code Online (Sandbox Code Playgroud)

android gradle kotlin gradle-kotlin-dsl

7
推荐指数
1
解决办法
1万
查看次数

Android Gradle Plugin 7 LibraryBuildType 不再具有 isDebuggable 属性

我正在从 Android Gradle 4.1.3 升级到 7.0.2。我注意到的一件事是,对于我的com.android.library模块,

getByName("foo") {
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在的接收器类型LibraryBuildTypeBuildType以前不同。现在LibraryBuildType不再具有以前拥有isDebuggable的属性BuildType

Android 官方文档提到了这一点

如果您的应用程序依赖于您也想调试的库模块,则还必须打包该库,debuggable true以便它保留其调试符号。

显然这些文档已经过时了,但是有什么用呢?不再debuggable true需要库模块?

我找到了git logfor ,它显示它是在 2020 年 4 月左右添加的,但我在LibraryBuildTypeandroid gradle 插件发行说明中没有找到任何有关此的信息

android gradle kotlin android-gradle-plugin gradle-kotlin-dsl

7
推荐指数
1
解决办法
1718
查看次数

Android Gradle 插件 - 我应该使用什么来代替孵化抽象,例如 defaultConfig?

我是 Gradle 新手,我正在尝试将我的 android groovy 构建脚本移植到 kts。

我有一个可以工作的版本,但是 Android studio 正在抱怨(到处)我的语法。

例如:

defaultConfig: 'defaultConfig(kotlin.jvm.functions.Function1<? super com.android.build.api.dsl.ApplicationDefaultConfig,kotlin.Unit>)' 被 @Incubating 标记为不稳定

“setApplicationId(java.lang.String)”在不稳定的“com.android.build.api.dsl.ApplicationBaseFlavor”中声明,并用@Incubating标记

这一直持续下去。当我查看文档时,我可以看到它正在孵化,但它没有说明用它替换什么等等。

android {
    compileSdk = 31
    defaultConfig {
        applicationId = "myappId"
        minSdk = 21
        targetSdk = 31
        versionCode = 1
        versionName = "1.0"
        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }
Run Code Online (Sandbox Code Playgroud)

我应该忽略这些警告吗?如果是这样,为什么要发出警告?


我刚刚在另一台机器上打开该项目,没有看到警告。该机器正在运行完全相同版本的 Android Studio:

  • 虚拟机
  • 科特林
  • 摇篮

当我单击 defaultConfig 之类的内容并导航到源代码时,我看到它来自完全相同的模块。它被标记为@Incubating。

我还检查了设置>编辑器>检查,它们都有相同的设置。

gradle android-gradle-plugin gradle-kotlin-dsl

7
推荐指数
1
解决办法
2451
查看次数

如何使用Gradle Kotlin-dsl添加新配置

使用gradle-groovy,可以使用以下命令创建新配置:

configurations {
    explode
}

dependencies {
    explode (group: 'org.apache.samza', name: 'samza-shell', ext: 'tgz', classifier: 'dist', version: "$SAMZA_VERSION")
}
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何用kotlin-dsl做到这一点。我试过了:

val explode by configurations

dependencies {
    explode(group = "org.apache.samza", name = "samza-shell",  ext = "tgz", classifier = "dist", version = samzaVersion)
    // "explode"(group = "org.apache.samza", name = "samza-shell",  ext = "tgz", classifier = "dist", version = samzaVersion)
}
Run Code Online (Sandbox Code Playgroud)

但没有成功。有任何想法吗?

gradle gradle-kotlin-dsl

6
推荐指数
1
解决办法
1822
查看次数

如何使用Gradle Kotlin DSL运行kotlintest测试?

我想要什么?

我想使用kotlintest运行测试,并且单击了测试类旁边的图标,从而成功地从IntelliJ运行了它们。我的项目中也有JUnit 5测试。我现在开始使用Gradle Kotlin DSL,并且设法运行了check执行JUnit 5任务的Gradle 任务。

问题是什么?

kotlintest测试未运行!似乎它没有被Gradle发现,因为失败的测试使Gradle任务成功。所以,

如何同时使用Gradle Kotlin DSL和JUnit 5运行kotlintest测试?

我尝试了什么?

如何使用Gradle运行kotlintest测试?基本上是问题的旧版本,但是由于使用了不同的技术:JUnit 4和Gradle而不是Gradle Kotlin DSL,已经过时了。我可以找到的所有其他问题是针对JUnit 4还是不带kotlintest的JUnit 5

项目设置

我正在使用Gradle 4.6。我的测试是

import io.kotlintest.matchers.exactly
import io.kotlintest.matchers.shouldBe
import io.kotlintest.specs.FunSpec

class KotlinTest: FunSpec() {

    init {
        testCalculate()
    }

    /** This failing test will not fail the Gradle check. */
    fun testCalculate() = test("one plus one is two") {
        (1+1).toDouble() shouldBe exactly(42.0)
    }

}
Run Code Online (Sandbox Code Playgroud)

我的build.gradle.kts

import org.gradle.api.plugins.ExtensionAware

import org.junit.platform.gradle.plugin.FiltersExtension …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin junit5 kotlintest gradle-kotlin-dsl

6
推荐指数
2
解决办法
2107
查看次数