Gradle/Kotlin相当于Python';s调用
我使用Python已经有几年了,我非常喜欢它。我可以使用文档快速编写构建任务,并自动解析自定义标志。我几乎完全不需要在自述文件中编写代码片段,我认为这很好 我目前正在构建一个Kotlin+Gradle项目,我正在寻找一个具有类似功能的插件/库 使用Gradle/Kotlin,您可以记录特定任务并对其进行分组,但是为了定义自定义标志,默认的方法是使用Gradle/Kotlin相当于Python';s调用,python,gradle,kotlin,build-automation,Python,Gradle,Kotlin,Build Automation,我使用Python已经有几年了,我非常喜欢它。我可以使用文档快速编写构建任务,并自动解析自定义标志。我几乎完全不需要在自述文件中编写代码片段,我认为这很好 我目前正在构建一个Kotlin+Gradle项目,我正在寻找一个具有类似功能的插件/库 使用Gradle/Kotlin,您可以记录特定任务并对其进行分组,但是为了定义自定义标志,默认的方法是使用-D或-p设置Java系统属性。这是可行的,但与Invoke相比,它还不够,因为我每次都必须添加一个属性存在性检查 此外,似乎没有内置的方法来记录每个
-D
或-p
设置Java系统属性。这是可行的,但与Invoke相比,它还不够,因为我每次都必须添加一个属性存在性检查
此外,似乎没有内置的方法来记录每个自定义标志
您知道可以与Invoke相比的插件/库吗?我不熟悉Invoke for Python,因此我可能不是给出答案的合适人选。但是,如果您希望将值从命令行传递给Gradle任务,除了使用项目属性之外,还有其他方法。一种是指定自定义命令行标志 如果这不是您所要求的,而是希望为最终的应用程序(而不是构建系统)提供一个命令行解析器,那么类似的方法也可以,正如注释中已经提到的那样 以下是用Kotlin编写的Gradle任务的示例,该任务读取可选的命令行标志:
open class OptionsExample
@javax.inject.Inject constructor(objectFactory: ObjectFactory) : DefaultTask() {
@get:Internal
@Option(option = "name", description = "Who to say hello to.")
val name = objectFactory.property<String>()
init {
group = "example"
description ="Says hello."
}
@TaskAction
fun printMessage() {
logger.lifecycle("Hello ${name.getOrElse("stranger")}")
}
}
tasks.register("hello", OptionsExample::class)
使用该标志执行时:
$ gradle hello
> Task :hello
Hello stranger
BUILD SUCCESSFUL in 2s
1 actionable task: 1 executed
$ gradle hello --name World
> Task :hello
Hello World
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
$gradle你好--命名世界
>任务:你好
你好,世界
在1s内成功构建
1个可执行任务:1个已执行
打印帮助页时:
$ gradle -q help --task hello
Detailed task information for hello
Path
:hello
Type
OptionsExample (Build_gradle$OptionsExample)
Options
--name Who to say hello to.
Description
Says hello.
Group
example
$gradle-q帮助--任务你好
hello的详细任务信息
路径
:你好
类型
选项示例(Build_gradle$选项示例)
选择权
--说出要向谁打招呼。
描述
打招呼。
团体
例子
为什么不只是一个生成文件?否则,您可以在JVM中编写任何CLI解析器language@cricket_007
make
可以很好地工作,但是,记录目标、使用自定义标志编写目标以及记录标志并不像使用Invoke那么容易。使用make,我通常通过env变量传递“自定义标志”,这是次优的,每次都需要检查是否设置了env变量。Invoke为您完成所有无聊的工作。@cricket\u 007通常我不想为JVM语言构建Invoke:)。。。然而,我也很犹豫是否将这个Python依赖项包含在基于JVM的项目中。我不知道有什么比这更好的,但也许这已经足够接近了