标签: gradle-kotlin-dsl

转换Android项目以使用Gradle Script Kotlin

我想build.gradle使用Gradle Script Kotlin将我的Android项目中的文件从Groovy 转换为Kotlin.我喜欢Kotlin中的所有这些,但如果有一些限制,那么尽可能多.

让我们假设我只有一个空项目,刚从Android Studio"新应用程序"模板创建(minSdkVersion 15如果重要的话,使用AppCompat).我需要采取哪些步骤才能将此项目转换为Gradle Script Kotlin.

我希望这应该是我(以及其他所有人)的一个很好的起点,我可以处理我自己转换任何自定义逻辑.

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

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

如何使用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
查看次数

如何在Gradle Kotlin DSL中使用gradle.properties中的插件版本?

现在我用这种方式:

plugins {
    val kotlinVersion: String by project
    val springBootPluginVersion: String by project
    val springDependencyManagementPluginVersion: String by project

    id("org.jetbrains.kotlin.plugin.allopen") version kotlinVersion
    id("org.jetbrains.kotlin.jvm") version kotlinVersion
    id("org.springframework.boot") version springBootPluginVersion
    id("io.spring.dependency-management") version springDependencyManagementPluginVersion
}
Run Code Online (Sandbox Code Playgroud)

这个变种编译和工作,但我不知道这是正确的,为什么IntelliJ IDEA在放置版本定义的行上显示错误:

'val Build_gradle.project: Project' can't be called in this context by implicit receiver. Use the explicit one if necessary
Run Code Online (Sandbox Code Playgroud)

intellij-idea gradle kotlin gradle-kotlin-dsl

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

Gradle 5 Kotlin DSL:多模块项目中的常见任务和Maven工件

我真的很想特别喜欢Gradle 5和新的Kotlin DSL的结合,但是我很难(很容易)获得一个非常,非常简单且通用的Gradle运行版本。

任务

在Maven默认目录布局中以简单的Gradle构建(即DRY)的形式发布具有几个相互依赖的子模块的Java库作为高质量的Maven工件/存储库

因此:有一个根项目作为伞,该根项目定义并包含所有通用配置(实际上是所有依赖项除外)。

我目前的挣扎

我将当前的“结果”移植到Github的示例项目中,并且已经在Gradle论坛中提出了这个问题

目前,我无法声明在中央构建中提供标准-sources-javadoc工件的必要任务。

例如,在寻找基于Kotlin DSL的解决方案时会发现这三个“解决方案” 在多模块场景中都不起作用(更长)

解决方案不完整(/build.gradle.kts

完整示例参见Github:https : //github.com/bentolor/gradle-maven-multimodule-kotlindsl

subprojects {
    apply(plugin = "java-library")
    apply(plugin = "maven-publish")
    group = "de.bentolor.sampleproject"
    version = "0.1.0"

    repositories {
        jcenter()
    }

    dependencies {
        // Dependencies used in EVERY module
        "compile"("commons-logging:commons-logging:1.2")
        "testImplementation"("junit:junit:4.12")
    }

    tasks { …
Run Code Online (Sandbox Code Playgroud)

java gradle maven multi-module gradle-kotlin-dsl

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

在Gradle Kotlin DSL中注册和创建之间有什么区别

在Gradle(5.0+)中有两种创建方法,即任务:

tasks {
    val javadocJar by creating(Jar::class) {
        val javadoc by tasks

        from(javadoc)
        classifier = "javadoc"
    }
}
Run Code Online (Sandbox Code Playgroud)

tasks {
    val javadocJar by registering(Jar::class) {
        val javadoc by tasks

        from(javadoc)
        classifier = "javadoc"
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上是相同的API,有什么区别?

gradle kotlin gradle-kotlin-dsl

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

Gradle 6 settings.gradle.kts 属性问题

请帮助我了解 Gradle 6 中的更改,因此以下代码不再起作用(在 Gradle 5 中运行良好):

val artifactoryUser: String by settings
val artifactoryPassword: String by settings

pluginManagement {
    repositories {
        mavenLocal()
        maven {
            url = uri("https://internal-artifactory")
            credentials {
                username = artifactoryUser
                password = artifactoryPassword
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个错误:“未解决的引用:artifactoryUser”。

这个问题可以通过在 pluginManagement 块中移动属性声明来解决

pluginManagement {
val artifactoryUser: String by settings
val artifactoryPassword: String by settings
    repositories {
        mavenLocal()
        maven {
            url = uri("https://internal-artifactory")
            credentials {
                username = artifactoryUser
                password = artifactoryPassword
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么。

gradle gradle-kotlin-dsl

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

Gradle:在 settings.gradle.kts 和 buildSrc/build.gradle.kts 之间共享存储库配置

有一个使用 Kotlin DSL 的 Gradle 6.X 多模块项目。 buildSrc功能用于在中心位置管理依赖版本。类似于此处描述的方法。

该项目使用内部服务器下载依赖项。它会导致两个地方的存储库设置配置重复:

buildSrc/build.gradle.kts

plugins {
    `kotlin-dsl`
}

repositories {
    // The org.jetbrains.kotlin.jvm plugin requires a repository
    // where to download the Kotlin compiler dependencies from.
    maven {
        url = uri("${extra.properties["custom.url"] as? String}")
        credentials() {
            username = extra.properties["custom.username"] as? String
            password = extra.properties["custom.password"] as? String
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和根settings.gradle.kts

...
gradle.projectsLoaded {
    allprojects {
        repositories {
            maven {
                url = uri("${extra.properties["custom.url"] as? String}")
                credentials() {
                    username = extra.properties["custom.username"] …
Run Code Online (Sandbox Code Playgroud)

gradle gradle-kotlin-dsl

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

当与 gradle 6.1.1 一起使用时,Android Studio 4.0 更新会出现 lint 基础结构错误

我正在尝试将我的 android studio 更新到 4.0(gradle 构建工具 4.0),并将 gradle 从 5.6.4 更新到 6.1.1。但是当我这样做时,我收到了一个专门针对 lint 任务的构建错误。

因此,当我运行./gradlew build./gradlew lint出现以下错误时。

> Task :mylib:lint FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':mylib:lint'.
> Lint infrastructure error
  Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at com.android.tools.lint.gradle.api.ReflectiveLintRunner.runLint(ReflectiveLintRunner.kt:38)
        at com.android.build.gradle.tasks.LintBaseTask.runLint(LintBaseTask.java:114)
        at com.android.build.gradle.tasks.LintGlobalTask.lint(LintGlobalTask.java:50)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:49)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:42)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
        at …
Run Code Online (Sandbox Code Playgroud)

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

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

应用了 Hilt Android Gradle 插件,但未找到 com.google.dagger:hilt-android 依赖项

我收到此 gradle 同步错误 -应用了 Hilt Android Gradle 插件,但未找到 com.google.dagger:hilt-android 依赖项。有人可以帮忙吗?:)

我使用 kotlin dsl,我在 buildSrc 中有 libs.kt

buildSrc - build.gradle.kts:

plugins {
    `kotlin-dsl`
}

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

buildSrc 中的 libs.kt

object libs {
        object hilt {
            private const val dagger_hilt_version = "2.30.1-alpha"
            private const val jetpack_hilt_version = "1.0.0-alpha02"

            const val gradlePlugin = "com.google.dagger:hilt-android-gradle-plugin:$dagger_hilt_version"
            const val android = "com.google.dagger:hilt-android:$dagger_hilt_version"
            const val android_compiler = "com.google.dagger:hilt-android-compiler:$dagger_hilt_version"

            const val jetpack_viewmodel = "androidx.hilt:hilt-lifecycle-viewmodel:$jetpack_hilt_version"
            const val jetpack_compiler = "androidx.hilt:hilt-compiler:$jetpack_hilt_version"
        }

        /* more objects + …
Run Code Online (Sandbox Code Playgroud)

android gradle gradle-kotlin-dsl dagger-hilt

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