标签: gradle-kotlin-dsl

sourceSets与gradle kotlin DSL在4.10rc级别

我使用以下代码:

java.sourceSets["main"].java {
    srcDir("src/main/extraSource")
}
Run Code Online (Sandbox Code Playgroud)

在gradle 4.9中完美运行,但在4.10中rc1给出以下错误:

  Line 5: java.sourceSets["main"].java {
               ^ Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
                   public val Project.sourceSets: SourceSetContainer defined in org.gradle.kotlin.dsl
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?是否需要改变?许多其他答案(例如 ,此问题的这一个和每个建议的答案)如果已经改变,也将需要更新

kotlin gradle-kotlin-dsl

8
推荐指数
1
解决办法
777
查看次数

Kotlin DSL:将versions.gradle.kts导入另一个build.gradle.kts

我创建了一个versions.gradle.kts像这样的:

object Defines {
     const val kotlinVersion = "1.2.61"
     const val junitVersion = "5.3.0"
}
Run Code Online (Sandbox Code Playgroud)

现在,我要像这样导入和使用这些文件:

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

group = "io.github.deglans"
version = "0.0.1-SNAPSHOT"

plugins {
    application
    kotlin("jvm") version Defines.kotlinVersion
}

application {
    mainClassName = "io.github.deglans.polishnotation.MainKt"
}

dependencies {
    compile(kotlin("stdlib-jdk8"))
    testCompile("org.junit.jupiter", "junit-jupiter-api", Defines.junitVersion)
    testRuntime("org.junit.jupiter", "junit-jupiter-engine", Defines.junitVersion)
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

注意:我已经看过这篇文章,但这并不完全是我搜索...

gradle kotlin build.gradle gradle-kotlin-dsl

8
推荐指数
1
解决办法
973
查看次数

如何在 Kotlin DSL 中为多模块项目创建“基础”gradle 文件?

为了重用 gradle 文件中的代码,我通常有一个用于某些模块的“基本”gradle 文件,只需应用它们并添加它可能需要的任何新依赖项。我正在将所有 gradle 文件转换为新的 Kotlin DSL,但使用以下“基本”文件时出现关键字“未解析的引用”错误。

plugins {
    id("com.android.library")
    kotlin("kotlin.android")
    kotlin("kapt")
}

android {
    compileSdkVersion(App.compileSdk)
    defaultConfig {
        minSdkVersion(App.minSdk)
        targetSdkVersion(App.targetSdk)
        versionCode = App.versionCode
        versionName = App.versionName
        testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        getByName("release") {
            isMinifyEnabled = false
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

dependencies {
    val implementation by configurations
    val testImplementation by configurations
    val androidTestImplementation by configurations

    implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar"))))
    implementation(Libs.kotlin_stdlib_jdk8)
    implementation(Libs.appcompat_v7)
    testImplementation(Libs.junit)
    androidTestImplementation(Libs.com_android_support_test_runner)
    androidTestImplementation(Libs.espresso_core)
}
Run Code Online (Sandbox Code Playgroud)

上面的文件在我的根项目中,我只是在功能模块中使用以下内容

apply(rootProject.file("base-android.gradle.kts")) …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin gradle-kotlin-dsl

8
推荐指数
1
解决办法
1708
查看次数

将项目迁移到Gradle Kotlin DSL时出现不支持的方法:IdeaModuleDependency.getDependencyModule()错误

当我从Intellidle IDEA中的Gradle Groovy DSL迁移到Kotlin DSL后尝试构建项目时,我收到了一个非常无法解释的错误.

Unsupported method: IdeaModuleDependency.getDependencyModule(). The version of Gradle you connect to does not support that method. To resolve the problem you can change/upgrade the target version of Gradle you connect to. Alternatively, you can ignore this exception and read other information from the model.

我正在使用gradle 5.0包装器,因此据我所知,更新不是一个选项.

我也使用最新版本的IntelliJ,所有插件都是最新的.

IntelliJ IDEA 2018.3(终极版)Build#IU-183.4284.148,建于2018年11月21日

我用Gradle构建的项目是一个多模块Kotlin-JVM项目.

intellij-idea gradle kotlin gradle-kotlin-dsl

8
推荐指数
0
解决办法
1046
查看次数

Android Studio无法使用Kotlin DSL打开Android项目

我已经将我们的Android项目之一从旧的Groovy settings.gradlebuild.gradle文件转换为新的Kotlin DSL,即settings.gradle.ktsbuild.gradle.kts

尽管“它可以在我的机器上工作”,尤其是:我从Groovy转换为Kotlin的原始项目在其原始目录中运行良好,但所有我的同事在克隆存储库时都无法打开该项目。重要的是,将存储库克隆到其他目录时,我也无法自己打开项目(在同一台计算机上使用相同的AS安装)。因此,我怀疑某些配置文件中缺少一些其他详细信息,但我似乎无法弄清楚哪个...

细节:

  • 当我只使用File > Open...然后选择项目文件夹时,我只会收到错误消息“项目'xxx'不是基于Gradle的项目”
  • 相反,当我依次检查Import Project (Gradle, Eclipse ADT, etc.)然后选择时Import project from external modelAndroid GradleAndroid Studio将创建一个空build.gradle文件并失败,并显示错误消息“错误:未找到ID为'com.android.library'的插件。” 删除build.gradle正义返回到我在第一个项目符号要点中描述的错误消息。

我知道这个Github问题,似乎描述了同样的问题,但是它一直很安静,我想这附近的某人一定想出了解决这个问题的方法...

哦,命令行构建在任何地方都可以工作-这纯粹是一个Android Studio问题。

更新:当我整个项目复制到一个新文件夹(而不是克隆存储库)时,我可以毫无问题地打开它。因此,我是否假设文件夹内必须有东西(但在Git中没有)是正确的呢?

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

8
推荐指数
2
解决办法
950
查看次数

未解决的参考:build.gradle.kts 中的 KotlinCompilerVersion

build.gradle.kts文件中,我将此代码包含在顶行。然后我使用下面的 KotlinCompilerVesion.VERSION 。

import org.jetbrains.kotlin.config.KotlinCompilerVersion
Run Code Online (Sandbox Code Playgroud)

有些代码工作正常,但有些代码失败:

似乎只有plugins块无法启用此功能import

这里工作正常:

dependencies {
    Implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION))
    Implementation(kotlin("test", KotlinCompilerVersion.VERSION))
}
Run Code Online (Sandbox Code Playgroud)

这里总是出错:

plugins {
    id("com.android.application")
    kotlin("android")
    kotlin("android.extensions")

    /*
    * Error: Unresolved reference: KotlinCompilerVersion
    */
    id("kotlinx-serialization") version KotlinCompilerVersion.VERSION

    /*
    * Error: Unresolved reference: KotlinCompilerVersion
    */
    id("kotlinx-serialization") version "$KotlinCompilerVersion.VERSION"

    /*
    * Error: Unresolved reference: KotlinCompilerVersion
    */
    id("kotlinx-serialization") version "${KotlinCompilerVersion.VERSION}"
}
Run Code Online (Sandbox Code Playgroud)

如何在不声明ext.xxxVersionvar 的情况下在这里正确使用它?

kotlin build.gradle gradle-kotlin-dsl

8
推荐指数
1
解决办法
9029
查看次数

如何在 Kotlin DSL 中有条件地接受 Gradle 构建扫描插件服务条款?

这基本上将这个问题扩展到 Kotlin DSL 而不是 Groovy DSL:

如何在Groovy的DSL解决方案

if (hasProperty('buildScan')) {
    buildScan {
        termsOfServiceUrl = 'https://gradle.com/terms-of-service'
        termsOfServiceAgree = 'yes'
    }
}
Run Code Online (Sandbox Code Playgroud)

转换为 Kotlin DSL?

我正在运行的问题是“buildScan”扩展或com.gradle.scan.plugin.BuildScanExtension类不能静态使用,因为它们存在或不存在取决于--scan命令行参数是否提供给 Gradle。

我试过了

if (hasProperty("buildScan")) {
    extensions.configure("buildScan") {
        termsOfServiceUrl = "https://gradle.com/terms-of-service"
        termsOfServiceAgree = "yes"
    }
}
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样termsOfServiceUrltermsOfServiceAgree没有解决,但是我不知道在这里使用什么语法。

gradle kotlin gradle-kotlin-dsl kotlin-dsl

8
推荐指数
1
解决办法
730
查看次数

如何使用 Kotlin DSL 将 JavaFX 添加到 gradle 构建文件?

如何通过 gradle 添加 javafx 依赖项?

thufir@dur:~/NetBeansProjects/helloWorldJavaFX$ 
thufir@dur:~/NetBeansProjects/helloWorldJavaFX$ gradle clean

> Configure project :
e: /home/thufir/NetBeansProjects/helloWorldJavaFX/build.gradle.kts:13:7: Unresolved reference: openjfx

FAILURE: Build failed with an exception.

* Where:
Build file '/home/thufir/NetBeansProjects/helloWorldJavaFX/build.gradle.kts' line: 13

* What went wrong:
Script compilation error:

  Line 13:   org.openjfx.javafxplugin
                 ^ Unresolved reference: openjfx

1 error

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help …
Run Code Online (Sandbox Code Playgroud)

dependencies javafx gradle build.gradle gradle-kotlin-dsl

8
推荐指数
1
解决办法
1439
查看次数

如何使用 Kotlin DSL 定义 Gradle 项目属性

我想检查是否设置了两个项目属性,如果没有,将它们设置为空值以避免构建失败。这些属性应该来自~/.gradle/gradle.properties(如果已配置)。

目标是拥有在该本地文件中定义的 S3 中 Maven 存储库的凭据。每个用户都必须将自己的数据放在那里,但我希望构建仅输出警告并在未设置时继续。即使不联系 S3,它仍然会成功的可能性很高。

我已经使用 Groovy DSL 运行它,但我现在正在切换到 Kotlin,但我无法正确使用语法。

这是~/.gradle/gradle.properties这样的:

s3AccessKeyId=ABCDEFGHIJKLMNOPQRST
s3SecretKey=abcdefghijklmnopqrstuvwxyz1234567890abcd
Run Code Online (Sandbox Code Playgroud)

这里是相关的部分 build.gradle.kts

s3AccessKeyId=ABCDEFGHIJKLMNOPQRST
s3SecretKey=abcdefghijklmnopqrstuvwxyz1234567890abcd
Run Code Online (Sandbox Code Playgroud)

无论我如何编写s3AccessKeyId=""行,我总是收到错误消息:

无法在额外的属性扩展中获取属性“s3AccessKeyId”,因为它不存在

如果在本地 Maven 存储库中找到所有工件,我希望构建工作,即使没有gradle.properties. 只有当某些工件丢失时,构建才会中止并出现一些“凭据错误”错误。

正如我所说,它已经与 Groovy 一起工作了。

gradle kotlin gradle-kotlin-dsl

8
推荐指数
1
解决办法
569
查看次数

Gradle 测试装置插件和核心模块依赖项

我有一个使用 Gradle 6.4 版和 JDK 8 构建的项目。我正在尝试将 Gradle插件用于测试装置( java-test-fixtures),但我在依赖项方面遇到了一些问题。

根据上面链接的 Gradle 页面,该项目的结构应如下所示:

core-module
-- src
   -- main
      -- java
   -- test
      -- java
   -- testFixtures
      -- java
Run Code Online (Sandbox Code Playgroud)

虽然该build.gradle.kts文件具有以下依赖项部分:

core-module
-- src
   -- main
      -- java
   -- test
      -- java
   -- testFixtures
      -- java
Run Code Online (Sandbox Code Playgroud)

现在,在testFixtures/java源文件夹中的 IntelliJ(我正在使用的 IDE)类中查看源文件夹中的类main/java。所以我可以在下面添加新的 Java 类testFixtures/java,这些类依赖于main. 但是,我将无法从外部库导入依赖项com.my.external.project:1.0。当我尝试运行 Gradle 任务时,问题得到确认compileTestFixturesJava

我可以复制该dependencies部分中的条目;例如我可以添加:

dependencies {
    api("com.my.external.project:1.0")
    // ... more API dependencies

    testFixturesCompileOnly(project(":core-module")) …
Run Code Online (Sandbox Code Playgroud)

java dependency-management gradle gradle-kotlin-dsl java-test-fixtures

8
推荐指数
1
解决办法
2854
查看次数