2014-01-07 4 views
0

Я написал задачу для запуска моего проекта, используя основной класс, выбранный с помощью пользовательского ввода, только он подсказывает мне выбрать основной класс, когда я запускаю 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 
} 

ответ

1

Gradle имеет фазу конфигурации и этап выполнения.
Тот факт, что ваша логика сборки фактически выполняется при вызове «задачи градации», заключается в том, что ваша логика сборки находится в разделе конфигурации задач. Если вы хотите, чтобы переместить его в фазу выполнения, вы должны ввести doFirst или doLast закрытия
См gradle build script basics для получения более подробной информации или this post

+0

Когда я добавить 'doLast' закрытия пользователя никогда не побудил, как ни странно достаточно спросить пользователя, когда я использую 'doFirst'. – Lerp

Смежные вопросы