将参数传递给Rake默认任务而不指定任务名称

时间:2013-10-20 19:06:33

标签: ruby rake

使用任务依赖项表示法,您可以将参数传递给默认任务。例如,说“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?

我正在寻找一种使用内置表示法的方法(如上所示),但避免必须指定任务名称。

1 个答案:

答案 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时不带任何参数。