标签: gradle-kotlin-dsl

构建时在resources中创建一个文件

这是针对 JVM 应用程序的。

我正在创建一个属性文件,其中包含要在应用程序运行时使用的版本。我在基础项目中编写了这个任务build.gradle.kts

allprojects {
    //...

    tasks.register("createVersionPropertiesFile") {
        group = "build"
        doLast {
            val resourcesDir = File("$buildDir/resources/main").apply { mkdirs() }
            val resource = File(resourcesDir, "version.properties")
            resource.writeText("version=${project.version}")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我独立运行此任务,它会按我的预期创建文件。

为了在构建期间运行任务,我将其放入应用程序模块中build.gradle.kts

tasks.processResources {
    dependsOn += tasks["createVersionPropertiesFile"]
}
Run Code Online (Sandbox Code Playgroud)

然而,在构建过程中,资源目录实际上被删除而不是创建(或者如果是的话,它会在构建完成之前再次被删除)。因此,应用程序运行时找不到资源。

如何设置此任务在构建过程的适当阶段运行?

我知道另一种策略是在源代码的实际资源目录中创建资源文件,但我不想用这个自动生成的文件弄脏签入的源代码。我希望它只是构建的一部分。

jvm gradle gradle-kotlin-dsl

3
推荐指数
1
解决办法
1233
查看次数

如何在 Kotlin 中定义自定义赋值运算符重载?

我有一个包含可变值的 Kotlin 类。

class StringWrapper(
  var value: String = ""
) {
  override fun toString(): String = value
}
Run Code Online (Sandbox Code Playgroud)

我使用这个包装器作为自定义数据持有者类中的属性

class DataHolder {
  val name = StringWrapper()

  override fun toString(): String = "Data(name=$name)"
}
Run Code Online (Sandbox Code Playgroud)

我想让它更容易地为内容赋值StringWrapper

val dataAlpha = DataHolder()

// the '.value' is unnecessary noise
dataAlpha.name.value = "alpha"

// I want to directly assign a string value, but I get an error
dataAlpha.name = "alpha"  // ERROR Type mismatch. 
                          //   Required: StringWrapper 
                          //   Found: String
Run Code Online (Sandbox Code Playgroud)

我还想让复制一个StringWrapper到另一个变得更容易。

val …
Run Code Online (Sandbox Code Playgroud)

operator-overloading assignment-operator kotlin gradle-kotlin-dsl

3
推荐指数
1
解决办法
413
查看次数

我正在使用最新的 kts 构建工具来学习 Android hilt,但是 kapt 似乎有一些问题

我正在使用最新的kts构建工具来学习Android hilt,并且我已经按照官方教程引入了依赖项,但是kapt似乎存在一些问题:

这是项目的根级别build.gradle.kts

plugins {
    id("com.android.application") version "8.2.0-alpha04" apply false
    id("com.android.library") version "8.0.0" apply false
    id("org.jetbrains.kotlin.android") version "1.8.20" apply false
    id("com.google.dagger.hilt.android") version "2.44" apply false
}
Run Code Online (Sandbox Code Playgroud)

这是项目的app build.gradle.kts

import org.jetbrains.kotlin.kapt3.base.Kapt.kapt

plugins {
    id("com.android.application")
    kotlin("kapt")
    id("com.google.dagger.hilt.android")
}

android {
    namespace = "com.example.myapplication"
    compileSdk = 33

    defaultConfig {
        applicationId = "com.example.myapplication"
        minSdk = 29
        targetSdk = 33
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions { …
Run Code Online (Sandbox Code Playgroud)

android gradle kapt gradle-kotlin-dsl dagger-hilt

3
推荐指数
1
解决办法
2687
查看次数

“androidx.emoji2:emoji2:1.4.0”需要依赖它的库和应用程序才能针对版本 34 或更高版本的 Android API 进行编译

到处导入SDK后项目停止构建import androidx.compose.ui.draw.alpha 33,显示依赖冲突

错误日志:

An issue was found when checking AAR metadata:

  1.  Dependency 'androidx.emoji2:emoji2:1.4.0' requires libraries and applications that
      depend on it to compile against version 34 or later of the
      Android APIs.

      :app is currently compiled against android-33.

      Recommended action: Update this project to use a newer compileSdk
      of at least 34, for example 34.

      Note that updating a library or application's compileSdk (which
      allows newer APIs to be used) can be done separately from updating
      targetSdk …
Run Code Online (Sandbox Code Playgroud)

android gradle-kotlin-dsl android-jetpack-compose

3
推荐指数
1
解决办法
2279
查看次数

使用 gradle kotlin-dsl 覆盖 spring boot 依赖版本

SpringBoot 带有许多依赖项以及它们的默认版本。在 groovy-gradle 中,这样的依赖版本可以被覆盖:

ext['mockito.version'] = '1.7.5'
Run Code Online (Sandbox Code Playgroud)

但这对 kotlin-dsl 不起作用。我试过:

val mockito by extra { "2.12.0" }
val mockito.version by extra { "2.12.0" }
val `mockito.version` by extra { "2.12.0" }
Run Code Online (Sandbox Code Playgroud)

后两个,不要编译,第一个,不起作用。

如何在 kotlin 文件中覆盖版本(如果可能的话,我不想创建单独的属性文件)。

gradle kotlin gradle-kotlin-dsl

2
推荐指数
1
解决办法
679
查看次数

gradle + kotlin-dsl:下载文件

如何使用kotlin-dslgradle 任务中下载文件?

我想从外部源 (URL) 下载文件并将其存储 + 重命名到我的项目文件夹中。

我试图搜索它,但我只找到了 groovy 解决方案。

提前致谢!

gradle kotlin gradle-kotlin-dsl

2
推荐指数
1
解决办法
1140
查看次数

如何使用 Gradle Kotlin DSL 设置 codecov?

我已阅读codecov/example-gradle,但不确定如何将其转换为 Kotlin DSL。

我的.travis.yml

language: java
jdk:
- openjdk11
before_install:
- chmod +x gradlew
- chmod +x gradle/wrapper/gradle-wrapper.jar
script:
- ./gradlew test
- ./gradlew codeCoverageReport
after_success:
- bash <(curl -s https://codecov.io/bash)
Run Code Online (Sandbox Code Playgroud)

我的build.gradle.kts

import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.2.71"
    jacoco
    maven
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter-engine:5.3.1")
}

tasks {
    "test"(Test::class) {
        useJUnitPlatform()
    }

    // Task with name 'codeCoverageReport' not found in root project ''.
    "codeCoverageReport"(JacocoReport::class) {
        executionData(fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec"))

        subprojects.onEach { …
Run Code Online (Sandbox Code Playgroud)

code-coverage gradle kotlin codecov gradle-kotlin-dsl

2
推荐指数
1
解决办法
1421
查看次数

Gradle Kotlin DSL的versionCodeOverride等效项

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            int newVersionCode = android.defaultConfig.versionCode * 10 + abiVersionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0)

            output.versionCodeOverride = newVersionCode
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试将此Gradle Groovy DSL代码转换为新的Gradle Kotlin DSL。我希望代码正常运行,就像以前的APK拆分变体遵循我的versionCode模式一样

这就是我试图用Kotlin DSL编写的内容:

    applicationVariants.all(object : Action<ApplicationVariant> {
        override fun execute(variant: ApplicationVariant) {
            variant.outputs.forEach {output ->
                val newVersionCode = defaultConfig.versionCode ?: 0 * 10 + abiVersionCodes[output.filters.first { it.identifier == com.android.build.OutputFile.ABI }]
                output.versionCodeOverride = newVersionCode
            }
        }
    })
Run Code Online (Sandbox Code Playgroud)

但它说:“未解决的参考:versionCodeOverride”

使用Kotlin DSL的正确方法是什么?

android gradle kotlin groovydsl gradle-kotlin-dsl

2
推荐指数
1
解决办法
368
查看次数

预期的 java.lang.string,找到 kotlin.string。intellij 中的 kotlin gradle 错误

kotlin application通过gradle init --dsl kotlin-> 将项目加载到intellij 中生成了一个骨架,并收到以下错误。附上截图。

Type mismatch : inferred type is kotlin.String but java.lang.String was expected.

我已经尝试了使缓存/重启无效的各种步骤。删除 .gradle、.idea、~/.gradle 等,刷新 gradle 项目,停止 gradle 守护进程。刷新 Intellij 项目(删除 ~/.intellijIDea../system 目录)。然而,没有一个有帮助。请告诉我我还能做什么?

正如我所说,我通过gradle init --dsl kotlin. gradle 版本 5.2.1,kotlin 插件版本 1.3.20。都是最新的。intellij idea 是 2018.3 版本。对于初学者,build.gradle.kts如下所示:

plugins {
    // Apply the Kotlin JVM plugin to add support for Kotlin on the JVM.
    id("org.jetbrains.kotlin.jvm").version("1.3.20")

    // Apply the application plugin to add support for building a CLI application. …
Run Code Online (Sandbox Code Playgroud)

intellij-idea gradle gradle-kotlin-dsl

2
推荐指数
1
解决办法
2981
查看次数

转换为 gradle-kotlin-dsl Jfrog.Artifactory 配置

我正在尝试从 groovy 迁移到 gradle-kotlin dsl,但我是新手,所以我不知道如何配置 Jfrog Artifactory。请帮助我将该部分代码转换为 gradle-kotlin dsl:

task sourceJar(type: Jar) {
    from sourceSets.main.allJava
}

artifactory {
    contextUrl = "http://10.0.0.49:8081/artifactory"
    publish {
        repository {
            repoKey = 'gradle-dev-local'
            username = artifactory_username
            password = artifactory_password
        }
        defaults {
            publications('mavenJava')
            publishArtifacts = true
            publishPom = true
        }
    }
}



publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId = "ua.tiras.oloader"
            artifactId = 'core'
            version = "1.0.62"
            artifact("$buildDir/libs/${project.getName()}.jar")
            artifact sourceJar {
                classifier "sources"
            }
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.api.allDependencies.each { dependency ->
                    def …
Run Code Online (Sandbox Code Playgroud)

artifactory gradle kotlin gradle-kotlin-dsl

2
推荐指数
1
解决办法
2162
查看次数