使用任务依赖项表示法,您可以将参数传递给默认任务。例如,说“version”是你的论点:
task :default, [:version] => [:build]
task :build, :version do |t,args|
version = args[:version]
puts version ? "version is #{version}" : "no version passed"
end
然后你可以这样称呼它:
$ rake
no version passed
或
$ rake default[3.2.1]
version is 3.2.1
或
$ rake build[3.2.1]
version is 3.2.1
但是,我没有找到一种方法来避免在传入参数时指定任务名称(默认或构建)。
是否有人知道使用此表示法的方法而不必指定任务名称? (即利用“默认”语法?)
我知道接收参数的ENV []方法,如下所述: How do I have the :default Rake task depend on a task with arguments?
我正在寻找一种使用内置表示法的方法(如上所示),但避免必须指定任务名称。
答案 0 :(得分:3)
如果你看一下rake源代码,就可以看出它是不可能的(GitHub):
# Collect the list of tasks on the command line. If no tasks are
# given, return a list containing only the default task.
# Environmental assignments are processed at this time as well.
def collect_tasks
@top_level_tasks = []
ARGV.each do |arg|
if arg =~ /^(\w+)=(.*)$/m
ENV[$1] = $2
else
@top_level_tasks << arg unless arg =~ /^-/
end
end
@top_level_tasks.push(default_task_name) if @top_level_tasks.empty?
end
在此方法中,将从提供的参数中收集要运行的任务。以-
开头的所有内容都将被忽略,foo=bar
形式的所有内容都用于设置环境,其他所有内容都被视为任务名称。
如果指定带参数的任务(foo[bar]
),则会在parse_task_string
中解析参数。
如果您未指定任务,则使用default
时不带任何参数。