Gradle/Kotlin相当于Python';s调用

Gradle/Kotlin相当于Python';s调用,python,gradle,kotlin,build-automation,Python,Gradle,Kotlin,Build Automation,我使用Python已经有几年了,我非常喜欢它。我可以使用文档快速编写构建任务,并自动解析自定义标志。我几乎完全不需要在自述文件中编写代码片段,我认为这很好 我目前正在构建一个Kotlin+Gradle项目,我正在寻找一个具有类似功能的插件/库 使用Gradle/Kotlin,您可以记录特定任务并对其进行分组,但是为了定义自定义标志,默认的方法是使用-D或-p设置Java系统属性。这是可行的,但与Invoke相比,它还不够,因为我每次都必须添加一个属性存在性检查 此外,似乎没有内置的方法来记录每个

我使用Python已经有几年了,我非常喜欢它。我可以使用文档快速编写构建任务,并自动解析自定义标志。我几乎完全不需要在自述文件中编写代码片段,我认为这很好

我目前正在构建一个Kotlin+Gradle项目,我正在寻找一个具有类似功能的插件/库

使用Gradle/Kotlin,您可以记录特定任务并对其进行分组,但是为了定义自定义标志,默认的方法是使用
-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的项目中。我不知道有什么比这更好的,但也许这已经足够接近了