В Rake я могу использовать следующий синтаксис, чтобы объявить, что задача требует, чтобы задачи alpha
и bravo
были выполнены в первую очередь.Как объявить rake :: PackageTask с предварительными условиями?
task :charlie => [:alpha, :bravo]
Это, кажется, работает хорошо, если charlie
типичная задача Rake или задача файла, но я не могу понять, как сделать это для Rake::PackageTask
. Вот соответствующие части rakefile до сих пор:
require 'rake/packagetask'
file :package_jar => [:compile] do
puts("Packaging library.jar...")
# code omitted for brevity, but this bit works fine
end
Rake::PackageTask.new("library", "1.0") do |pt|
puts("Packaging library distribution artefact...")
pt.need_tar = true
pt.package_files = ["target/library.jar"]
end
task :package => :package_jar
То, что здесь происходит, что, для чистой сборки, он жалуется, что «не знает, как построить задачу„цель/library.jar“» , Я должен запустить rake package_jar
из командной строки вручную, чтобы заставить его работать, что немного неприятно. Есть ли способ, который я могу сделать package
зависит от package_jar
?
Для чего это стоит, я использую Rake версии 0.9.2.2 с Ruby 1.8.7 на Linux.
Это работает, спасибо. Однако это кажется сумасшедшим, что вы вынуждены назвать свои задачи после того, как они производят артефакт, а не то, что они на самом деле делают! Я не думаю, что есть способ обойти это, не так ли? – ATG
@ATG В случае задач 'file' я думаю, что имеет смысл называть их после создаваемого файла. Вы говорите Rake «это то, что вы делаете, чтобы создать этот файл», а это значит, что если Rake необходимо создать файл (как в этом случае), он знает, что делать. Вы всегда можете добавить 'task: package_jar => 'target/library.jar'', если хотите, чтобы вы могли сами вызвать эту задачу с более простым именем. – matt
Я понимаю вашу точку зрения, но я привык к тому, что могу дать свои задачи/методы и т. Д. Значащие имена, которые описывают, что они делают. Также кажется странным, что обычные задачи построения, такие как «компиляция» и «тест», называются после выполнения действия, а не результатом операции. В любом случае, спасибо за вашу помощь! – ATG