2014-04-11 3 views
0

Я пытаюсь написать правило задачи для создания ряда задач, которые проверяют различные местоположения хранилища svn. Вот мое правило:Не удалось создать правило задачи Gradle с задачей Exec


tasks.addRule("Pattern: svnCheckout&ltClassifier> - Checks out the indicated svn repo") { String taskName -> 
    if(taskName.startsWith('svnCheckout')) { 
    task(name: taskName, type: Exec) { 
     String classifier = taskName - 'svnCheckout' 
     String svnDir = svnRepoUrl //defined elsewhere 
     switch(classifier) { 
     case 'SourceTrunk': 
      svnDir += 'branches/CleanBuild/trunk' 
      break 
     case 'AutoInstaller': 
      svnDir += 'Tools/AutoInstaller' 
      break 
     case 'ContentAutomation': 
      svnDir += 'Tools/ContentAutomation' 
      break 
     case 'InternalTools': 
      svnDir += 'Tools/Internal' 
      break 
     default: 
      throw new GradleException("Invalid svnCheckout classifier '$classifier'") 
     } 

     String svnCommand = "svn co $svnDir --trust-server-cert" 

     //commandLine 'cmd', '/c', "$svnCommand" 
     commandLine 'cmd', '/c/', "echo 'Task created'" 
     workingDir = "$workspace" 
    } 
    } 
} 

Затем я пытаюсь запустить задачу 'svnCheckoutSourceTrunk' с этой командой:

gradlew -Pworkspace="." svnCheckoutSourceTrunk

, который завершается с ошибкой


FAILURE: Could not determine which tasks to execute. 

* What went wrong: 
Task 'svnCheckoutSourceTrunk' not found in root project 'GradleScripts'. 

* Try: 
Run gradlew tasks to get a list of available tasks. 

BUILD FAILED 

Любой увидеть, что Я поступаю неправильно? Я помещал несколько операторов println вокруг первых нескольких строк, и выполнение проходит мимо оператора if, но оно не попадает в объявление задачи.

ответ

1

Синтаксис, используемый для объявления задач (задач), неверен. (Не знаю, почему это не дает ошибку.) Первая позиционная аргумент всегда должна быть именем задачи:

task(taskName, type: Exec) { ... } 

В скрипте сборки, это будет также работать:

task "$taskName"(type: Exec) { ... } 
+0

Спасибо. Кажется странным, что это проблема. Не будет ли «name: taskName» первым аргументом быть функционально эквивалентным? Что там происходит? – Max

+0

Что вы подразумеваете под «функционально эквивалентным»? Все перегрузки метода 'Project # task' имеют в качестве первого позиционного параметра String. Как я уже сказал, я не уверен, почему ваш синтаксис не дает ошибку, поэтому я поднял http://issues.gradle.org/browse/GRADLE-3065. –

+0

А, я запутал его с перегрузками tasks.create(). Неважно. – Max

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