2015-01-16 4 views
3

Что у меня есть?Задача задачи плавного пуска

  1. Java исходный файл с основного класса (MainApp)
  2. Gradle сценарий сборки

apply plugin: 'application' mainClassName = "MainApp" sourceSets.main.java.srcDirs = ['.']

Так что, когда я gradle run, он выполняет основной метод и все работает просто отлично.

C:\tmp\gradle-fun>gradle run :compileJava :processResources UP-TO-DATE :classes :run Hello MainApp !! BUILD SUCCESSFUL

Что я хочу сделать? Теперь мне было интересно узнать о чистой задаче (общие задачи сборки), чтобы очистить каталог сборки до выполнения задачи run. Там это причина того, я хочу, чтобы убедиться, что каждый раз, когда Gradle должны скомпилировать Java-файлы и все .class файл должен быть обновлен (его некоторое требование)

То, что я пытался?

Добавлена ​​задача оболочки, выполняющая чистую задачу и выполняющая задачу по порядку.

apply plugin: 'application' mainClassName = "MainApp" sourceSets.main.java.srcDirs = ['.'] task exec(dependsOn: ['clean', 'run'])

так, когда я бегу gradle exec, он делает это задание правильно. Однако я чувствую, что его исправление работает, когда у вас есть дополнительные задачи только для заказа исполнения.

C:\tmp\gradle-fun>gradle run :clean :compileJava :processResources UP-TO-DATE :classes :run Hello MainApp !! :exec BUILD SUCCESSFUL

То, что я хотел бы знать?

Есть ли способ избежать написания задачи обертки и сделать некоторую магию градации для достижения этого требования?

ответ

4

Задача run зависит от clean. Это обеспечит очистку вашего проекта перед каждым запуском. Если вы хотите быть более конкретным в отношении вашего варианта использования, вы можете просто очистить задачу compileJava.

run.dependsOn 'cleanCompileJava' 

Edit: Чтобы избежать удаления ваших классов до запуска дополнения:

classes.mustRunAfter 'cleanCompileJava' 
+0

На самом деле, я попробовал то же самое - но 'clean' задача вызываются непосредственно перед' run' - который удаляет каталог для сборки (что хорошо), но он удаляет недавно составленный класс. Таким образом, файл основного класса не будет запущен. :( – Kunal

+0

Я обновил свой ответ с добавлением, предложенным Янито. –

+0

Спасибо .. Он работал без каких-либо патч-работы (означает добавление задач-оберток). 'compileJava.mustRunAfter 'clean'' тоже делает то же самое. – Kunal

4

Вы можете создать свою собственную задачу, с clean и run как зависимостей:

task cleanRun(dependsOn: [clean, run]) 

Или , вы можете следовать за ответом Марка Виейры и изменить проводку:

run.dependsOn 'clean' 
classes.mustRunAfter 'clean' 

Вторая строка гарантирует, что она не очистит скомпилированные классы.

Надеется, что это помогает =)

+0

Что такое 'классы', ссылающиеся на компиляцию Javac? –

+1

@Igor точно, задача' classes' отвечает за компиляцию всех Java-файлы и генерировать все файлы '.class'. –

+0

Означает ли это, что мы можем отменить этот порядок следующим образом:' clean.mustRunAfter 'classes''? –

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