Gradle 不必要地运行任务
我已经编写了一个任务,使用通过用户输入选择的主类运行我的项目。当我运行Gradle 不必要地运行任务,gradle,Gradle,我已经编写了一个任务,使用通过用户输入选择的主类运行我的项目。当我运行gradletasks时,它会提示我选择一个主类。这是为什么?我如何预防 task run(dependsOn: "classes", type: JavaExec) { description "Executes the project using the selected main class" def selection = null def mainClasses = [] // S
gradletasks
时,它会提示我选择一个主类。这是为什么?我如何预防
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
}
任务运行(dependsOn:“类”,类型:JavaExec){
说明“使用选定的主类执行项目”
def selection=null
def mainClasses=[]
//选择包含主类的java文件
sourceset.main.allJava.each{
if(it.text.contains(“publicstaticvoidmain”)){
def pkg=relativePath(it)-'src/main/java/'-'java'
pkg=pkg.tr/“,”
println“${mainClasses.size()}.$pkg”
mainClasses=0&&selection
Gradle有一个配置阶段和一个执行阶段。在调用“gradle tasks”时,您的构建逻辑实际上是运行的,这是因为您的构建逻辑位于tasks configuration部分。如果要将其移动到执行阶段,应引入doFirst或doLast闭包
有关更多详细信息,请参阅或当我添加
doLast
闭包时,用户从未得到提示,奇怪的是,当我使用doFirst
时,用户会得到提示。