Rake:如何从任务中输出任务列表?

Lor*_*rin 16 ruby rake

我希望我的:Rakefile中的默认任务是一个有用的消息,其中还包括不熟悉rake的人的可用任务列表(rake -T的输出).

你如何从任务中调用rake -T?

小智 12

rake -T在较新版本的rake中,从任务内部调用会稍微复杂一些.需要设置的选项可以从rake/lib/application.rb方法中派生standard_rake_options.基本上归结为

Rake::TaskManager.record_task_metadata = true

task :default do
  Rake::application.options.show_tasks = :tasks  # this solves sidewaysmilk problem
  Rake::application.options.show_task_pattern = //
  Rake::application.display_tasks_and_comments
end
Run Code Online (Sandbox Code Playgroud)

请注意,record_task_metadata无法在默认任务中设置,因为在执行任务时已经太晚了(描述将不会被收集,因此这些都是零,因此没有任务与模式匹配).尝试从任务中重新加载Rakefile将导致闭环.我假设在总是收集元数据时有性能交易.如果这是一个问题

task :default do
  system("rake -sT")  # s for silent
end
Run Code Online (Sandbox Code Playgroud)

可能更合适.

两者都使用rake 0.9.2.2为我工作.