class Rake::Application
Rake 主应用程序对象。当从命令行调用 rake
时,会创建一个 Rake::Application
对象并运行它。
常量
- DEFAULT_RAKEFILES
属性
name[R]
应用程序的名称(通常为 ‘rake’)
original_dir[R]
调用 rake 的原始目录。
rakefile[R]
使用的实际 Rakefile 的名称。
terminal_columns[RW]
终端上的列数
top_level_tasks[R]
顶层任务名称列表(来自命令行的任务名称)。
tty_output[W]
覆盖检测到的 TTY 输出状态(主要用于测试)
公共类方法
new() 点击切换源码
初始化一个 Rake::Application
对象。
调用超类方法
# File rake-13.2.1/lib/rake/application.rb, line 49 def initialize super @name = "rake" @rakefiles = DEFAULT_RAKEFILES.dup @rakefile = nil @pending_imports = [] @imported = [] @loaders = {} @default_loader = Rake::DefaultLoader.new @original_dir = Dir.pwd @top_level_tasks = [] add_loader("rb", DefaultLoader.new) add_loader("rf", DefaultLoader.new) add_loader("rake", DefaultLoader.new) @tty_output = STDOUT.tty? @terminal_columns = ENV["RAKE_COLUMNS"].to_i set_default_options end
公共实例方法
add_loader(ext, loader) 点击切换源码
添加一个加载器来处理以扩展名 ext
结尾的导入文件。
# File rake-13.2.1/lib/rake/application.rb, line 161 def add_loader(ext, loader) ext = ".#{ext}" unless ext =~ /^\./ @loaders[ext] = loader end
execute(*) 点击切换源码
调用超类方法
# File rake-13.2.1/lib/rake/application.rb, line 107 def execute(*) exception = DEBUGGER__::SESSION.capture_exception_frames(/(exe|bin|lib)\/rake/) do super end if exception STDERR.puts exception.message DEBUGGER__::SESSION.enter_postmortem_session exception raise exception end end
init(app_name="rake", argv = ARGV) 点击切换源码
初始化命令行参数和应用程序名称。
# File rake-13.2.1/lib/rake/application.rb, line 88 def init(app_name="rake", argv = ARGV) standard_exception_handling do @name = app_name begin args = handle_options argv rescue ArgumentError # Backward compatibility for capistrano args = handle_options end load_debug_at_stop_feature collect_command_line_tasks(args) end end
load_rakefile() 点击切换源码
查找 Rakefile,然后加载它和任何待处理的导入。
# File rake-13.2.1/lib/rake/application.rb, line 124 def load_rakefile standard_exception_handling do raw_load_rakefile end end
options() 点击切换源码
来自命令行的 Application
选项
# File rake-13.2.1/lib/rake/application.rb, line 167 def options @options ||= Struct.new( :always_multitask, :backtrace, :build_all, :dryrun, :ignore_deprecate, :ignore_system, :job_stats, :load_system, :nosearch, :rakelib, :show_all_tasks, :show_prereqs, :show_task_pattern, :show_tasks, :silent, :suppress_backtrace_pattern, :thread_pool_size, :trace, :trace_output, :trace_rules ).new end
run(argv = ARGV) 点击切换源码
运行 Rake 应用程序。run 方法执行以下三个步骤
-
初始化命令行选项 (
init
)。 -
定义任务 (
load_rakefile
)。 -
运行顶层任务 (
top_level
)。
如果您想构建自定义的 rake 命令,您应该在您的应用程序上调用 init
。然后定义任何任务。最后,调用 top_level
来运行您的顶层任务。
# File rake-13.2.1/lib/rake/application.rb, line 79 def run(argv = ARGV) standard_exception_handling do init "rake", argv load_rakefile top_level end end
run_with_threads() { || ... } 点击切换源码
在线程启动和关闭的情况下运行给定的代码块。
# File rake-13.2.1/lib/rake/application.rb, line 144 def run_with_threads thread_pool.gather_history if options.job_stats == :history yield thread_pool.join if defined?(@thread_pool) if options.job_stats stats = thread_pool.statistics puts "Maximum active threads: #{stats[:max_active_threads]} + main" puts "Total threads in play: #{stats[:total_threads_in_play]} + main" end ThreadHistoryDisplay.new(thread_pool.history).show if options.job_stats == :history end
top_level() 点击切换源码
运行 Rake 应用程序的顶层任务。
# File rake-13.2.1/lib/rake/application.rb, line 131 def top_level run_with_threads do if options.show_tasks display_tasks_and_comments elsif options.show_prereqs display_prerequisites else top_level_tasks.each { |task_name| invoke_task(task_name) } end end end
私有实例方法
load_debug_at_stop_feature() 点击切换源码
# File rake-13.2.1/lib/rake/application.rb, line 102 def load_debug_at_stop_feature return unless ENV["RAKE_DEBUG"] require "debug/session" DEBUGGER__::start no_sigint_hook: true, nonstop: true Rake::Task.prepend Module.new { def execute(*) exception = DEBUGGER__::SESSION.capture_exception_frames(/(exe|bin|lib)\/rake/) do super end if exception STDERR.puts exception.message DEBUGGER__::SESSION.enter_postmortem_session exception raise exception end end } rescue LoadError end