问题标签 [gradle-kotlin-dsl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1456 浏览

gradle - 如何在两个 build.gradle.kts 文件之间共享构建配置?

我有两个项目(在一个 git 存储库中)应该具有相同的

在他们的部分build.gradle.kts,但在其他方面是完全不相关的。

我可以将这个共同部分分解并包含在每个部分中 build.gradle.kts吗?如何?

0 投票
1 回答
3070 浏览

intellij-idea - Gradle kotlin 脚本,> 未找到 ID 为 `kotlin` 的插件

我尝试使用 Kotlin 脚本将我的一个项目迁移到 Gradle。

这些是我的步骤:

  • /gradle/wrapper/gradle-wrapper.jar这个代替
  • distributionUrl将of更新为与此处gradle/wrapper/gradle-wrapper.properties相同
  • 创建了对应的build.gradle.kts
  • 设置settings.gradlerootProject.buildFileName = 'build.gradle.kts'

此时 Intellij 检测到它并建议:

您可以配置 Gradle 包装器以将分发与源一起使用。它将为 IDE 提供 Gradle API/DSL 文档。

-> 好的,应用建议!

Gradle 'hello-kotlin' 项目刷新失败

错误:未找到 ID 为“kotlin”的插件。

然后我也尝试了官方样品之一:

  • 克隆了回购
  • 打开样品
  • 同样的错误

...我究竟做错了什么?

回到官方样例,尝试失效缓存重启,还是不行

我试图删除

刷新 Gradle,再次添加,刷新 Gradle,成功了

如果我打开一个 src 文件,Intellij 会说:

Kotlin 未配置

但是该示例现在似乎正在运行..

Intellij 2017.1 EAP

科特林 1.1m04

0 投票
4 回答
28210 浏览

kotlin - 如何使用 Gradle Kotlin 脚本创建胖 JAR?

如标题所示,我想知道如何修改gradle.build.kts,以便创建一个jar包含所有依赖项(包括 kotlin 库)的唯一的任务。

我在 Groovy 中找到了这个示例:

但我不知道如何在 kotlin 中编写它,除了:

0 投票
5 回答
4916 浏览

gradle - 使用 Gradle Kotlin DSL 在 Gradle 中进行样板项目配置

我目前正在尝试改进我们的项目共享配置的方式。我们所有的库和微服务(即许多 git repos)都有许多不同的多模块 gradle 项目。

我的主要目标是:

  • 不要在每个项目中重复我的 Nexus 存储库配置(另外,我可以放心地假设 URL 不会更改)
  • 为了使我的自定义 Gradle 插件(发布到 Nexus)可用于每个项目,且样板/重复最少(它们应该可用于每个项目,并且项目唯一关心的是它使用的版本)
  • 没有魔法 - 开发人员应该很清楚一切是如何配置的

我当前的解决方案是一个自定义的 gradle 发行版,它带有一个 init 脚本:

  • mavenLocal()我们的 Nexus 存储库添加到项目存储库(非常类似于 Gradle初始化脚本文档示例,除了它添加存储库并验证它们)
  • 配置一个扩展,允许将我们的 gradle 插件添加到 buildscript 类路径中(使用此解决方法)。它还将我们的 Nexus 存储库添加为 buildscript 存储库,因为这是托管插件的地方。我们有很多插件(基于 Netflix 优秀的nebula 插件构建)用于各种样板:标准项目设置(kotlin 设置、测试设置等)、发布、发布、文档等,这意味着我们的项目build.gradle文件几乎只是用于依赖项.

这是初始化脚本(已清理):

然后我通过将以下内容添加到根 build.gradle 文件来配置每个新项目:

虽然这种方法有效,但允许可重现的构建(不像我们之前的设置,它从 URL 应用构建脚本 - 当时不可缓存),并且允许离线工作,它确实让它有点神奇,我想知道我是否可以做得更好。

这一切都是通过阅读Gradle 开发人员 Stefan Oehme在 Github 上的评论触发的,该评论指出构建应该在不依赖 init 脚本的情况下工作,即 init 脚本应该只是装饰性的,并且可以执行文档示例之类的操作 - 防止未经授权的 repos 等。

我的想法是编写一些扩展函数,允许我将 Nexus 存储库和插件添加到构建中,其方式看起来像是内置在 gradle 中(类似于扩展函数gradleScriptKotlin()kotlin-dsl()由 Gradle Kotlin DSL 提供。

所以我在一个 kotlin gradle 项目中创建了我的扩展函数:

计划在我的项目中使用它们build.gradle.kts如下:

但是,Gradle 在buildscript块中使用时无法看到我的函数(无法编译脚本)。不过,在正常的项目存储库/依赖项中使用它们效果很好(它们是可见的并且按预期工作)。

如果这可行,我希望将 jar 捆绑到我的自定义发行版中,这意味着我的 init 脚本可以只进行简单的验证,而不是隐藏神奇的插件和 repo 配置。扩展功能不需要更改,因此在插件更改时不需要发布新的 Gradle 发行版。

我尝试了什么:

  • 将我的 jar 添加到测试项目的 buildscript 类路径(即buildscript.dependencies) - 不起作用(也许这在设计上不起作用,因为buildscript在同一个块中添加依赖项似乎不正确)
  • 将功能放入buildSrc(这适用于正常的项目部门/回购但不是buildscript,但不是真正的解决方案,因为它只是移动样板)
  • 将 jar 放到lib发行版的文件夹中

所以我的问题真的归结为:

  • 我想要实现的目标是否可行(是否可以使自定义类/函数对buildScript块可见)?
  • 是否有更好的方法来配置企业 Nexus 存储库并使自定义插件(发布到 Nexus)在许多单独的项目(即完全不同的代码库)中可用,且样板配置最少?
0 投票
34 回答
253830 浏览

android - 错误:任务“:app:compileDebugKotlin”执行失败。> 编译错误。有关详细信息,请参阅日志

构建:gradle(模块:应用程序)

构建:gradle(项目)

// 顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。

解决方案尝试:

  1. 使缓存无效/重新启动
  2. 构建 -> 清理项目
  3. 更新 kotlin 插件,使用最新版本的 kotlin,google APIs。

编辑

日志错误.txt

0 投票
0 回答
327 浏览

google-app-engine - 使用 Kotlin 脚本配置 App Engine Gradle 插件

我正在尝试使用 Gradle Script Kotlin 在我的 App Engine 项目上配置构建,但无法弄清楚如何设置 cloudSdkHome 属性(或插件的任何配置!)

在一个 groovy gradle 脚本中,它是这样完成的:


构建.gradle.kts

我可以看到 AppEngineStandardPlugin 确实以与主扩展“appengine” AppEngineStandardPlugin不同的方式注册“工具”扩展

0 投票
1 回答
14495 浏览

gradle - Kotlin DSL 中的 gradle 额外属性是如何设置的?

我正在尝试像在 groovy 中那样组织我的构建文件,方法是将值放在一个单独的文件中以供重用。但我无法理解在 kotlin DSL 中做同样事情的语法。

这是我在 root build.gradle.kts 中使用的内容:

这是正在引用的 config.gradle.kts 中的内容:

但是有一个错误:

无法在额外属性扩展上获取属性“minSdkVer”,因为它不存在

0 投票
1 回答
4514 浏览

gradle - 摇篮 KTS。如何将依赖项配置从主构建移动到单独的文件?

我正在尝试在 kotlin 中创建模块化构建脚本。基本上是主脚本和依赖脚本。在 build.gradle.kts 我有:

在 dependencies.kts 我有实际的依赖项:

这失败了:

如果我尝试导入 kotlinModule,则会失败:

我做错了什么以及如何做对?

版本及相关信息:

  • 梯度:4.0
  • 摇篮 KTS:0.9.0
  • 编辑器:IntelliJ U 2017.1.4
  • Kotlin 插件:1.1.3 EAP
  • 项目的 Kotlin 版本:1.1.2.5

当我在主文件中有依赖项时,我的构建工作完美。所有必要的配置(构建脚本、插件、存储库等)都存在,但为简洁起见,此处省略。

0 投票
1 回答
501 浏览

gradle - 摇篮。Kotlin - 是否可以创建动态(“on fly”)任务?

我是一名安卓开发者。结果由 Gradle 编写构建。我在 Groovy 上的 Gradle DSL 上编写的许多任务。

有时我需要动态创建 Gradle 任务(“on fly”)。这里的例子:

此任务生成具有所有风味组合的新任务。结果 Gradle 脚本非常小,易于理解且易于支持。它非常强大的 Groovy 功能​​。它经常帮助我。

在新版本的 Gradle 中引入了新语言 - Kotlin。

我的问题是:是否可以在 Kotlin 上编写相同的任务(用于动态创建另一个任务)?

0 投票
3 回答
2512 浏览

gradle - Kotlin 和 Gradle - 从 stdio 读取

我正在尝试使用以下命令执行我的 Kotlin 类:

这是我的HelloWorld.kt类:

这是我的build.gradle.kts

代码会执行,但不会显示 input.txt 文件中包含的数据。这是我得到的输出:

我希望能够执行上面的 gradlew 命令,并将 input.txt 流重定向到 stdio。我可以在 C++ 中轻松做到这一点。编译 .cpp 文件后,我可以运行:

它按预期执行。

如何使用 Kotlin 和 Gradle 实现相同的目标?

更新:基于此答案,我尝试将其添加到 build.gradle.kts 但它不是有效的语法:

在此处输入图像描述