我有一个gradle脚本,其中我使用变量配置了一个插件(在我的例子中是ospackage,但我想这同样适用于另一个插件),如下所示:
ospackage {
...
version project.ext.my_version
...
}
首先初始化该变量,然后使用我在构建脚本中首先调用的任务更新该变量:
ext {
...
my_version = "XXX"
...
}
task init{
group 'ho'
description 'get HO Version'
doLast {
...
project.ext.my_version = getParameter("VERSION")
...
}
}
问题是插件(在我的例子中是ospackage)总是考虑初始值“xxx”,而不是通过执行init任务设置的正确值。我知道这与配置和执行阶段有关,但我仍然找不到一个变通方法来做我想做的事情。
为了了解信息,我还尝试创建了一个如下所示的任务,但它也失败了,因为buildDeb任务似乎没有覆盖ospackage版本参数
buildDeb {
doLast {
...
version project.ext.my_version
link('/usr/bin/aa', '/usr/bin/aa.sh')
...
}
}
我还试着在我的文件的末尾放了这样的东西:
ospackage.dependsOn("init")
但问题是ospackage没有被识别为任务
事先谢谢你的帮助。
根据文档,任务类型为deb
:
task fooDeb(type: Deb) {
packageName // Default to project.name
packageDescription // Defaults to project.description
version // Version field, defaults to project.version
arch // Architecture, defaults to "all". E.g. "amd64", "all"
multiArch // Configure multi-arch behavior: NONE (default), SAME, FOREIGN, ALLOWED (see: https://wiki.ubuntu.com/MultiarchSpec )
release // DEB Release
epoch // Epoch, defaults to 0
user // Default user to permission files to
permissionGroup // Default group to permission files to, "group" is used by Gradle for the display of tasks
packageGroup
buildHost
license
packager
distribution
vendor
url
signingKeyId
signingKeyPassphrase
signingKeyRingFile
sourcePackage
provides
uid // Default uid of files
gid // Default gid of files
createDirectoryEntry // [Boolean]
maintainer // Defaults to packager
uploaders // Defaults to packager
priority
summary
conflicts
recommends
suggests
enhances
preDepends
breaks
replaces
}
其中:
version版本字段,默认值为Project.version
可能会给RPM插件一个尝试。
在我看来,你的问题的本质是围绕着点播价值的。我的理解是,您希望在配置阶段设置一个版本号,并在执行阶段使用该值使用ospackage插件设置包版本。
问题是ospackage文档仅提供了在配置阶段设置包常量的示例(到目前为止)。显然,这是行不通的,因为这是您设置版本的同一时间(必须能够并行完成的事情)。您对dolast
有正确的想法。我发现来自ospackage的一些东西不能放在“dolast”块中,如packageName
(如果您有多个相同的包/任务类型),所以我只是将需要按需评估的东西放在那个块中(版本,因为我们需要将其评估延迟到执行阶段)。
我的解决方案是创建一个变量来保存解析版本的函数。
def versionForRpm = { -> project.version }
创建配置块
configurations.ext {
version = versionForRpm
...
}
这是一个按需值(也称为懒惰评估值)的示例。
task someRpmBuild(type: Rpm) {
// all package configs that require evaluation during execution phase (lazy)
doLast {
version = configurations.ext.version
requires("someotherpackageinthisbuild", configurations.ext.version(), 0)
}
// all package configs that may be evaluated during the configuration phase
release = configurations.ext.release
packageGroup = configurations.ext.packageGroup
license = configurations.ext.license
packager = configurations.ext.packager
user = configurations.ext.user
distribution = configurations.ext.distribution
vendor = configurations.ext.vendor
url = configurations.ext.url
os = configurations.ext.os
buildHost = configurations.ext.buildHost
epoch = configurations.ext.epoch
arch = configurations.ext.arch
}
请注意,configurations.ext.version
将在执行阶段自动“调用”。但是,当用作requires
中的参数时,我需要显式调用它。
https://docs.gradle.org/current/userguide/custom_tasks.html 如何使此任务在执行阶段运行?正在传递一个空闭包 唯一的解决办法? 但是hello任务似乎是在构建的配置阶段调用的。
我是格雷德尔的新手。我正在尝试使用一个插件,但我想在执行过程中更改插件的默认值 我希望在执行过程中使用project.version中存在的版本值。但看起来该值是在执行任何任务之前设置的。有什么想法吗?
下面我们假设每个时间点只有一个Spark作业在运行。 以下是我所理解的在Spark中发生的事情: 创建时,每个工作节点都启动一个执行器。执行程序是单独的进程(JVM),它连接回驱动程序。每个执行器都有驱动程序的jar。退出驱动程序,关闭执行程序。每个执行程序可以保存一些分区。 执行作业时,将根据沿袭图创建执行计划。 执行作业被拆分为多个阶段,其中阶段包含相同数量的相邻转换和操作(在沿袭图中),但不
试图了解如何创建自定义插件。但我无法完成我的新任务。我得到这个错误: 无法应用插件[id为“Code4Reference”] 更新:现在我面临另一个问题,当执行我的新任务,应该签署所有的RPM在路径上找到。我知道这在大楼里很好用。格拉德尔: 在libs.gradle.sign类型的任务“:MyTask”上找不到参数[libs.gradle.sign$_showmessage_closure1@4b
我有一个Gradle任务,简单地将文件从一个文件夹复制到另一个文件夹。 当在配置阶段调用copy'from''into'方法时,它可以工作,但当在执行阶段调用它们时,它就不工作了。 这样做是有效的 gradle copyServerConfig 如果我把它放在doFirst{}块中,也会发生同样的事情。 我不明白的另一件事是: gradle task1 但如果我改成这样: gradle task1
我正在尝试将Gradle插件中的一些任务配置从Groovy转换为Kotlin。我发现的所有示例都是关于普通构建脚本的,这种方法似乎并没有直接转化为插件的使用。我的尝试如下: 产生以下错误: 类型不匹配:推断类型是()- 做这件事的正确方法是什么?