使用rake导入(调用其他rakefiles)

Dre*_*rew 6 ruby import rake rakefile

这是我的主要rake文件

subrake = 'subrake'

task :init => [subrake] do
  #call subrake.build
end

import subrake
Run Code Online (Sandbox Code Playgroud)

我看到有关上述步骤如何工作的文档,但我无法弄清楚如何在其他子文件中调用任务.顺便说一句,这些任务可能与我的名字相同,这是一个问题吗?

ie.*_*ie. 7

我想我的答案已经很晚了,但我刚才也有同样的问题.因此,该解决方案可能对某人有用.

Rakefile.rb

subrake = 'subrake'

task :default => :init

task :init => ["#{subrake}:init"] do
  Rake::Task["#{subrake}:build"].invoke
end

require "#{Dir.pwd}/#{subrake}"
Run Code Online (Sandbox Code Playgroud)

subrake.rb

namespace :subrake do

  desc "Init"
  task :init do
    puts 'Init called'
  end

  desc "Build"
  task :build do
    puts 'Build called'
  end

end
Run Code Online (Sandbox Code Playgroud)

我猜这段代码本身就很好,但我想暂停一下.当您调用require时,您应该为subrake文件提供完整路径(如我的示例中)或'.\ subrake'(如果它在工作目录中)


mol*_*ule 5

如果您有多个子rake文件,您可以执行类似的操作

Dir.glob('**/*.rake').each { |r| import r}

task :init => ["subrake:init"] 
Run Code Online (Sandbox Code Playgroud)

你可以有一个看起来像这样的sub.rake文件

namespace :subrake do
  desc "Init"
  task :init do
    puts 'Init called'
  end
end
Run Code Online (Sandbox Code Playgroud)

和另一个foo.rake文件

namespace :foorake do
  desc "Init"
  task :init do
    puts 'Init called'
  end
end
Run Code Online (Sandbox Code Playgroud)

你可以像这样从shell调用foorake:init

#rake foorake:init
Run Code Online (Sandbox Code Playgroud)

或者将它添加到你的主要做这样的任务

task :init => ["subrake:init", "fforake:init"]
Run Code Online (Sandbox Code Playgroud)