java - Gradle 在自定义运行任务中创建参数
问题描述
我是 Gradle 的新手,我肯定错过了一些东西,但这个基本问题对我来说是一个谜。
我正在尝试创建多个自定义任务,从应用程序插件中包装 Gradle“运行”,根据自定义任务的需要在其中创建一个或多个参数。我不想从 CLI* 传递参数,我希望在运行包装 Gradle 任务中创建这些参数。
让我们看一个使用我想要实现的示例:
// Main.kt
fun main(args: Array<String>) {
for (a in args)
println("$a ") // prints 'env1' or 'env2 5' (see gradle.build)
}
// gradle.build, unworking attempt 1
gradle.registerTask("customA") {
description = "run wrapper 1"
doFirst {
gradle.run.configure {
systemProperty("-Dtask", "env1")
}
}
finalizedBy("run")
}
// gradle.build, unworking attempt 2
gradle.registerTask("customB") {
description = "run wrapper 2"
args = listOf("env2", "5")
finalizedBy("run")
}
// Then use as
./gradlew customA
// Essentially I want the above command to be equal to ./gradlew run --args=['env2', '5']
该程序不是 Spring Boot,而是一个小型 kotlin 项目。因此,我希望它作为程序运行,而不是作为 jar 运行。不幸的是,每当我使用“args”属性时,Gradle 就会开始寻找一个罐子,想不出办法。第一个选项(customA 任务)不会在 main 的 args 列表中提供参数,但我想它可以通过不满足我的要求的 getProperty() 访问。
你能告诉我做我想做的事情的正确方法吗?
*有很多关于如何做到这一点的话题
解决方案
您的第一次尝试是设置系统属性,而不是应用程序参数。您的第二次尝试是设置任务的参数customB
,而不是run
任务。对于您想要的东西,可能有更好的方法,但以下方法似乎有效:
主.kt
fun main(args: Array<String>) = println(args.contentToString())
build.gradle.kts(科特林 DSL):
plugins {
kotlin("jvm") version "1.5.20"
application
}
application {
mainClass.set("MainKt")
}
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
}
tasks {
val run by existing(JavaExec::class)
register("customA") {
doFirst {
run.configure {
args = listOf("Hello", "World!")
}
}
finalizedBy(run)
}
register("customB") {
doFirst {
run.configure {
args = listOf("Goodbye", "World!")
}
}
finalizedBy(run)
}
}
通过以上,我得到以下输出:
执行 | 输出 |
---|---|
./gradlew customA |
[Hello, World!] |
./gradlew customB |
[Goodbye, World!] |
推荐阅读
- java - 总是得到“org.openqa.selenium.ElementNotVisibleException:元素不可见”异常
- css - 位置粘性不适用于 body{overflow-x: hidden; }
- html - div大小不起作用
- node.js - 如果用户不存在,则 MongoDB 更新
- javascript - 在 Android WebView 中禁用 console.assert
- python - MySQL-python 安装后报错
- neo4j - 如何使用 Cypher 查找两个节点之间的中间节点
- python - 如何从负值元组列表中打印绝对值?
- ruby-on-rails - 从列表中添加选项作为标签
- circleci - 使用 AWS CodePipeline 或其他的复杂/编排 CD