2010-09-17 101 views

回答

2

我似乎已經通過簡單地添加格式爲「taskname_no_prerequisites」的額外任務來解決此問題。因此,例如在下面的代碼中執行「rake install_no_prerequisites」不會導致「build」被執行。

desc "Build" 
task :build do 
    puts "BUILDING..." 
end 

desc "Install" 
task :install => :build do 
    puts "INSTALLING..." 
end 

Rake::Task::tasks.each do |task| 
    desc "#{task} without prerequisites" 
    task "#{task}_no_prerequisites".to_sym do 
    task.invoke_without_prerequisites 
    end 
end 

module Rake 
    class Task 
    def invoke_without_prerequisites 
     execute 
    end 
    end 
end 
+1

爲什麼不直接在任務定義的任務對象上調用.execute? invoke_without_prerequisites似乎只是一個別名 – Titas 2014-04-16 23:37:57

1

,如果你在一個任務定義依賴,它總是會先運行。然而,您可以單獨創建任務,然後與另一項任務聚集在一起他們,就像這樣:

task :build do 
    ... 
end 

task :install do 
    ... 
end 

task :go => [:build, :install] 

,然後你可以調用編譯或獨立安裝任務,或運行與去任務序列。

rake build
rake install
rake go

我這個做了很多,其實。它使我可以非常方便地在需要時運行各個步驟,並且在需要時可以採用更大的步驟順序。

+0

我想這是一個足夠好的答案。我真的在尋找一個簡單的命令行開關,但它跳過了依賴關係。 – AndrewVos 2010-09-18 14:08:52

+0

哦,我忘了說謝謝! – AndrewVos 2010-09-18 14:09:14