在Rake中,我可以使用以下語法聲明該任務charlie
需要任務alpha
和bravo
先完成。如何使用先決條件聲明Rake :: PackageTask?
task :charlie => [:alpha, :bravo]
這似乎很好地工作,如果charlie
是一個典型的Rake任務或文件的任務,但我無法弄清楚如何爲Rake::PackageTask
做到這一點。下面是Rake文件的相關部分迄今:
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
?
對於什麼是值得的,我在Linux上使用Rake版本0.9.2.2和Ruby 1.8.7。
這工作,謝謝。不過,這看起來很瘋狂,你不得不在他們出品的產品之後命名你的任務,而不是他們實際做的事!我不認爲有解決辦法,是嗎? – ATG
@ATG在'file'任務的情況下,我認爲在創建文件後命名它們是有意義的。你告訴Rake「這就是你創建這個文件的過程」,這意味着如果Rake需要創建文件(就像在這種情況下),它知道該怎麼做。如果您希望能夠以更簡單的名稱自行調用該任務,則始終可以添加'task:package_jar =>'target/library.jar'。 – matt
我明白你的觀點,但我習慣於能夠給我的任務/方法等描述他們所做的事情的有意義的名字。這看起來很奇怪,因爲傳統的構建任務(如「編譯」和「測試」)是根據執行的操作而不是操作的結果命名的。無論如何,感謝您的幫助! – ATG