相关疑难解决方法(0)

在gradle中,如何将变量用于插件版本?

我的一个构建脚本导入了这个星云插件:

plugins {
  id 'nebula.ospackage' version '3.5.0'
}
Run Code Online (Sandbox Code Playgroud)

我一直在将所有版本信息移动到一个单独的文件中,所有项目都可以访问,并且想知道转换为以下内容的正确语法是什么:

plugins {
  id 'nebula.ospackage' version "$versions.nebula_gradle_ospackage_plugin"
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用"gradle clean build"运行上面的操作时,出现以下错误:

构建文件'build.gradle':2:参数列表必须正好是1个非空字符串

有关 插件{}块的信息,请参阅 https://docs.gradle.org/2.7/userguide/plugins.html#sec:plugins_block

@第2行,第33列.id'nebula.ospackage'版本"$ versions.nebula_gradle_ospackage_plugin"

链接的文章展示了我如何使用"buildscript"块,它可以工作,但似乎必须有一种方法可以使这个工作在一行?

gradle netflix-nebula-plugins

35
推荐指数
6
解决办法
7314
查看次数

不能在插件块中使用项目额外的属性

我有一个多项目构建,而且我经常发现自己锁定了所有工件的版本。所以在我的根项目中,我定义了类似的东西:

project.extra.set("pkgVersions", mapOf(
    "kotlin" to "1.2.0",
    "jooq" to "3.10.2"
))

val pkgVersions : Map<String, String> by project.extra

plugins {
    base
    kotlin("jvm") version "1.2.0" apply false
}
Run Code Online (Sandbox Code Playgroud)

虽然我可以pkgVersions在任何地方使用,包括其他子项目:

val pkgVersions by rootProject.extra

jooq {
    version = pkgVersions["jooq"]
}
Run Code Online (Sandbox Code Playgroud)

我无法在插件块中这样做:

plugins {
    kotlin("jvm") version pkgVersions["kotlin"]
}
Run Code Online (Sandbox Code Playgroud)

给我错误“隐式接收器无法在此上下文中调用 pkgVersions。如果需要,请使用显式一个”。我假设这是因为隐式接收器应该是文件的 JVM 印象?但它正在使用PluginDependencySpec. 尝试使用this@仅显示的自动完成this@plugin。这只是我的一个长期猜测。但是,关于我应该做什么的任何指示?

另外,虽然我们是在它,有没有一种方法来创建一个全球型gradle-kotlin-dsl,例如:

data class MyBuildType(..)
Run Code Online (Sandbox Code Playgroud)

并且在不使用的情况下随处可用buildSrc?它非常简单,buildSrc我不介意使用它,但只是想知道。

gradle-kotlin-dsl

20
推荐指数
3
解决办法
9090
查看次数