标签: kotlin-dsl

如何从 Kotlin DSL build.gradle 中的所有依赖项中排除库?

我开始从build.gradle(Groovy)迁移到build.gradle.kts(Kotlin DSL)。问题是com.google.common.util.concurrent.ListenableFuture(from com.google.guava) 存在于几个依赖项中。由于该构建失败并java.lang.RuntimeException: Duplicate class ...出现错误。

以前(当我build.gradle在 Groovy 中时)这个问题是用这个片段解决的:

configurations {
    all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
Run Code Online (Sandbox Code Playgroud)

但是我使用 Kotlin DSL 找不到任何类似的东西。您能否为上面的代码片段提供 Kotlin 替代方案,或者建议任何其他解决方案来解决这个问题?

android gradle kotlin gradle-kotlin-dsl kotlin-dsl

19
推荐指数
2
解决办法
6677
查看次数

如何在 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 的 Android 特定风味依赖

在里面build.gradle我们可以

   productFlavors {
        free {
            dimension "tier"
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后

dependencies { freeDebugImplementation "com.someDependency:free-debug:1.0.0";}
Run Code Online (Sandbox Code Playgroud)

但是当我使用Kotlin DSL, inside 时build.gradle.kts,我

productFlavors { create("free") {...} }
Run Code Online (Sandbox Code Playgroud)

然后在dependencies不能

dependencies { freeImplementation(...)}
Run Code Online (Sandbox Code Playgroud)

错误:^ Unresolved reference: freeImplementation 那么,我如何implementation通过 Kotlin DSL 获得特定的风格?

android gradle-kotlin-dsl kotlin-dsl

7
推荐指数
2
解决办法
1166
查看次数

如何使用变量拆分基于 kotlin 的大型 Gradle 构建文件?

我有一个很大的 gradle.build.kts 文件,我试图使用 apply(from = "xxx") 将其分成更小的部分(如果存在更好的解决方案,我愿意接受)。

问题是我遇到了一个问题,我的脚本之一无法处理变量。这是示例代码:

构建.gradle.kts

plugins { java }
repositories { mavenCentral() }
dependencies { testCompile("junit", "junit", "4.12") }

println("Before Apply")
apply(from = "./build.gradle.test.kts")
println("After Apply")
Run Code Online (Sandbox Code Playgroud)

构建.gradle.test.kts

println("Applying")

tasks.test {
    val failedTests = mutableListOf<TestDescriptor>()
}

println("Applied")
Run Code Online (Sandbox Code Playgroud)

这两个文件都位于根项目文件夹中。

输出...

>gradle clean build test

> Configure project :
Before Apply

FAILURE: Build failed with an exception.

* Where:
Build file 'D:\Users\jamesdmcmillian\Projects\FacilitatorLabs\Labs\gradle-dsl-script-variables\build.gradle.kts' line: 6

* What went wrong:
Could not open cp_dsl generic class cache for script 'D:\Users\jamesdmcmillian\Projects\FacilitatorLabs\Labs\gradle-dsl-script-variables\build.gradle.test.kts' (C:\Users\jamesdmcmillian\.gradle\caches\6.8\scripts\7kclhsg56vjpfm1z90j …
Run Code Online (Sandbox Code Playgroud)

variables gradle kotlin-dsl

6
推荐指数
0
解决办法
846
查看次数

如何从非 build-gradle 文件访问 Kotlin DSL 扩展?

很少有 Kotlin 扩展带有org.gradle.kotlin.dsl类似 androidpublishing等。比如说, for publishing,扩展定义如下

fun org.gradle.api.Project.`publishing`(configure: org.gradle.api.publish.PublishingExtension.() -> Unit): Unit =
    (this as org.gradle.api.plugins.ExtensionAware).extensions.configure("publishing", configure)
Run Code Online (Sandbox Code Playgroud)

这意味着在我的范围内build.gradle.kts我可以打电话

publishing {
    // blablabla
}
Run Code Online (Sandbox Code Playgroud)

就我而言,我有一个单独的文件来处理定义为的发布random.gradle.kts,并且位于完全随机的目录中。

在这里,我想访问这个publishing扩展,但无法做到。

欢迎任何建议。

再举个例子android也是不可访问的。在我的build.gradle.kts我可以访问android,但在我的random.gradle.kts我无法做到这一点。

android扩展名定义如下

val org.gradle.api.Project.`android`: com.android.build.gradle.LibraryExtension get() =
    (this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("android") as com.android.build.gradle.LibraryExtension

Run Code Online (Sandbox Code Playgroud)

事实上,LibraryExtension也是不可访问的。

那么,如何将这些扩展传递导入random.gradle.kts到我的?

gradle maven gradle-kotlin-dsl kotlin-dsl gradle-kts

5
推荐指数
1
解决办法
2210
查看次数

警告:Kotlin 插件版本不受支持

和插件依赖于 Kotlin 的功能,embedded-kotlin这些功能的工作方式可能与所请求的版本不同kotlin-dsl1.4.311.5.21

如何设置embedded-kotlinkotlin-dsl1.5.21版本?

android build.gradle android-gradle-plugin kotlin-dsl

5
推荐指数
0
解决办法
959
查看次数

使用插件 DSL 添加 Kotlin 插件

看起来使用插件 DSL 声明一些Kotlin 插件有两种方法:使用id()方法和kotlin()方法。例如,可以使用 或 添加 androidid("kotlin-android")插件kotlin("android")。对于 也是如此,kapt但对于 则不然parcelize。为什么不能这样呢kotlin("parcelize")?这种差异有原因吗?我尝试查找相关文档,但这并没有让我走得太远。

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

5
推荐指数
1
解决办法
2838
查看次数

Kotlin - DSL 颜色样式

在 Kotlin 中使用 @DslMarker 对注解类进行注解时,装订线中会出现一个图标,指示 DSL 样式

在此处输入图片说明

当我尝试将样式更改为不同的颜色时,它没有任何作用。Kotlin 如何选择 DSL 风格,以及如何强制执行特定风格?

intellij-idea kotlin kotlin-dsl

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

使用 Kotlin DSL 构建 Fatjar 时出错

我正在尝试使用 ShadowJar 构建一个 fatjar。我的应用程序和 gradle 代码如下。我使用 Gradle 5.0 进行构建。当我运行 ./gradlew run 时,代码有效。当我运行“gradle Shadowjar”,并在“build/lib”文件夹中使用“java -jar”运行 fatjar 时,出现以下错误。

我猜依赖项没有加载到 fatjar 中?我还使用 Groovy 构建 Gradle 文件,但遇到了同样的错误。

我没有在 fatjar 文件中包含所有依赖项,这是否正确?如果是这种情况,您知道如何修改 Gradle 文件以确保包含此文件吗?

Gradle Kotlin DSL

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

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

    id("com.github.johnrengelman.shadow") version "5.0.0"

    // Apply the application plugin to add support for building a CLI application.
    application
}

repositories {
    // Use jcenter for resolving your dependencies.
    // …
Run Code Online (Sandbox Code Playgroud)

gradle kotlin gradle-kotlin-dsl http4k kotlin-dsl

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

gradle kotlin DSL 扩展自

我该如何重新表述:

testCompile.extendsFrom compileOnly
Run Code Online (Sandbox Code Playgroud)

Gradle Groovy DSL 与其基于 Kotlin 的等效项?

configurations {
        testCompile{
            extendsFrom(compileOnly)
        }
    }
Run Code Online (Sandbox Code Playgroud)

我上面的方法失败了。

build gradle kotlin gradle-kotlin-dsl kotlin-dsl

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

将请求方法与 Spring Security 的 Kotlin DSL 相匹配

Spring Security 提供了 Kotlin DSL 以便于配置。这是Spring 博客中的一个示例:

override fun configure(http: HttpSecurity?) {
    http {
        httpBasic {}
        authorizeRequests {
            authorize("/greetings/**", hasAuthority("ROLE_ADMIN"))
            authorize("/**", permitAll)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我只想允许对特定路径的 POST 请求。在Java中,你可以这样做:

http
  .httpBasic().and()
  .authorizeRequests()
    .antMatchers(HttpMethod.POST, "/greetings").hasRole("ADMIN");
Run Code Online (Sandbox Code Playgroud)

有使用 Kotlin DSL 的示例吗?

spring spring-security kotlin kotlin-dsl

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