2015-08-18 1 views
0

Я пытаюсь определить две новые задачи Gradle, buildAll и pubLocal, для выполнения других задач в определенном порядке.Orchestrating Gradle build invocations с настраиваемыми задачами

Когда вызывается gradle buildAll, я хочу, чтобы Gradle выполнял то же самое, как если бы я выполнил gradle clean build writePom (см. Ниже для writePom).

Когда выполнено gradle pubLocal, я хочу, чтобы Gradle выполнял то же самое, как если бы был выполнен gradle buildAll install.

Вот моя лучшая попытка до сих пор:

// build.gradle 
task writePom << { 
    pom { 
     project { 
      groupId 'mygroup' 
      artifactId 'mylib' 
      version version 

      inceptionYear '2015' 
      licenses { 
       license { 
        name 'Blah' 
        url 'blah' 
        distribution 'blah' 
       } 
      } 
     } 
    }.writeTo("build/libs/pom.xml") 
} 

task buildAll(dependsOn: clean, build, writePom) 

task pubLocal(dependsOn: buildAll, install) 

Когда я бегу gradle buildAll на это, я получаю:

[email protected]:~/tmp/myapp$./gradlew buildAll 
FAILURE: Build failed with an exception. 

* Where: 

Build file '/Users/myuser/tmp/myapp/build.gradle' line: 67 

* What went wrong: 

A problem occurred evaluating root project 'myapp'. 

> Could not find method buildAll() for arguments [{dependsOn=task ':clean'}, task ':build', task ':writePom'] on root project 'myapp'. 

Любые идеи о том, где я буду криво?

ответ

1

Это может быть слева от копирования, но ваши строки не котируются последовательно, используя стандартные одиночные или двойные кавычки. Пример:

}.writeTo(“build/libs/pom.xml") 

не процитировать строку правильно, так как она открывается с символом вместо ". То же самое с одиночными кавычками над ним.

Вы можете видеть, как выделяется ваш код, что все в красном понимается как строка. Если это имеет место в вашем фактическом коде, задачи buildAll и pubLocal не будут распознаваться, так как они являются частью строки, а не кода.

UPDATE:

Поскольку выше ответ в настоящее время не имеет никакого значения, вот еще одна возможность. Сообщение об ошибке показывает, что в параметре dependOn указан только задание "clean". Зависимости задач buildAll должны быть объявлены как это:

task buildAll(dependsOn: [clean, build, writePom]) 

Похожие с pubLocal задачи.

+0

Спасибо @thecodesmith_ (+1) ** да ** это была копия-паста. Я отредактировал мой оригинальный код, чтобы показать, что я на самом деле цитирую все правильно, и я заверяю вас, что это происходит в моем фактическом 'build.gradle', который имеет правильные кавычки. Любые другие идеи? – smeeb

0

Я использую Gradle 2.4. Следующий файл включает в себя плагин Maven, использует список [] в dependsOn, и гарантирует, что clean должны быть выполнены перед build:

apply plugin: 'maven' 

task writePom << { 
    pom { 
     project { 
      groupId 'mygroup' 
      artifactId 'mylib' 
      version version 

      inceptionYear '2015' 
      licenses { 
       license { 
        name 'Blah' 
        url 'blah' 
        distribution 'blah' 
       } 
      } 
     } 
    }.writeTo("build/libs/pom.xml") 
    println "TRACER writePom" 
} 

task clean << { println "TRACER clean" } 
task build << { println "TRACER build" } 
build.mustRunAfter clean 

task install << { println "TRACER install" } 

task buildAll(dependsOn: [clean, build, writePom]) 

task pubLocal(dependsOn: [buildAll, install]) 

я получаю этот выход (минус Gradle 3 предупреждения):

bash-3.2$ gradle buildAll 
:clean 
TRACER clean 
:build 
TRACER build 
:writePom 
TRACER writePom 
:buildAll 

BUILD SUCCESSFUL 

и

bash-3.2$ gradle pubLocal 
:clean 
TRACER clean 
:build 
TRACER build 
:writePom 
TRACER writePom 
:buildAll 
:install 
TRACER install 
:pubLocal 

BUILD SUCCESSFUL