我编写了一个任务,使用通过用户输入选择的主类来运行项目,但这只是在我运行gradle tasks
时提示我选择一个主类。为什么会这样,如何防止呢?
task run(dependsOn: "classes", type: JavaExec) {
description "Executes the project using the selected main class"
def selection = null
def mainClasses = []
// Select the java files with main classes in
sourceSets.main.allJava.each {
if(it.text.contains("public static void main")) {
def pkg = relativePath(it) - 'src/main/java/' - '.java'
pkg = pkg.tr "/", "."
println "${mainClasses.size()}. $pkg"
mainClasses << pkg
}
}
// Now prompt the user to choose a main class to use
while(selection == null) {
def input = System.console().readLine "#? "
if(input?.isInteger()) {
selection = input as int
if(selection >= 0 && selection < mainClasses.size()) {
break
} else {
selection = null
}
} else if(input?.toLowerCase() == "quit") {
return
}
if(selection == null) {
println "Unknown option."
}
}
main = mainClasses[selection]
classpath = sourceSets.main.runtimeClasspath
}
最佳答案
Gradle具有配置阶段和执行阶段。
您的构建逻辑实际上是在调用“渐变任务”时运行的,这是因为您的构建逻辑位于“任务配置”部分中。如果要将其移至执行阶段,则应引入doFirst或doLast闭包
有关更多详细信息,请参见gradle build script basics或this post
关于gradle - 任务不必要地运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975743/