为什么你需要一个别名?您可以在没有任何代码的情况下引入新任务,但是具有原始任务的先决条件。
namespace :db do
task :table do
puts "table"
end
#kind of alias
task :t => :table
end
这可以用参数组合:
require 'rake'
desc 'My original task'
task :original_task, [:par1, :par2] do |t, args|
puts "#{t}: #{args.inspect}"
end
#Alias task.
#Parameters are send to prerequisites, if the keys are identic.
task :alias_task, [:par1, :par2] => :original_task
为避免搜索参数的名称,你可以用arg_names
读取参数:
#You can get the parameters of the original
task :alias_task2, *Rake.application[:original_task].arg_names, :needs => :original_task
它合并到define_alias_task
- 方法:
def define_alias_task(alias_task, original)
desc "Alias #{original}"
task alias_task, *Rake.application[original].arg_names, :needs => original
end
define_alias_task(:alias_task3, :original_task)
用ruby 1.9.1和rake-0.8.7测试。
嗯,嗯,我看到几乎在几小时前差不多完全相同solution RyanTM already posted。
我知道这个方法,但它不能传递参数。 – coolesting
我很确定它可以。等几分钟,我会准备一个例子。 – knut
我加了我的例子 - 并检测到它已经发布的答案。但也许我的解释有助于理解(说实话,我没有理解Ryans的答案,直到我做出相同的回答;) – knut