Как я заставляю Задачу Граблей бежать за всеми другими задачами? (т.е. Грабли задача AfterBuild)

Моим определением был бы язык, который обычно распределяется как источник, а не как двоичный файл.

18
задан Community 23 May 2017 в 12:25
поделиться

3 ответа

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

task :test1 do
  puts 'test1'
end

task :test2 do 
  puts 'test2'
end

task :after do
  puts 'after'
end

# top_level_tasks is't writable so we need to do this ugly
# instance_variable_set hack...
current_tasks =  Rake.application.top_level_tasks
current_tasks << :after
Rake.application.instance_variable_set(:@top_level_tasks, current_tasks)

Выводы:

$ rake test1
test1
after

$ rake test1 test2
test1
test2
after
11
ответ дан 30 November 2019 в 05:53
поделиться

Я не знаю, лучший ли это способ, но он проще:

Сделайте все свои «общедоступные задачи» сводными, которые вызывают реальные задачи.

task :compile => :realcompile do
   summary stuff
end
1
ответ дан 30 November 2019 в 05:53
поделиться

Вы сможете сделать это с помощью'hance ':

Rake::Task["my_task"].enhance do
  Rake::Task["my_after_task"].invoke
end

Это вызовет вызов' my_after_task 'после' my_task '.

Если вы хотите применить это ко всем задачам, просто переберите все задачи и улучшения вызова для каждого:

Rake::Task.tasks.each do |t| 
  t.enhance do 
    Rake::Task["my_after_task"].invoke
  end
end

Полный тестовый файл:

task :test1 do 
  puts 'test1'
end

task :test2 do 
  puts 'test2'
end

Rake::Task.tasks.each do |t|
  t.enhance do 
    puts 'after'
  end
end

И вывод:

$ rake test1
test1
after

$ rake test2
test2
after
37
ответ дан 30 November 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: