使用rake import(调用其他rake文件)

6
这是我的主要rake文件。
subrake = 'subrake'

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

import subrake

我看到了有关上述步骤如何工作的文档,但我不知道如何调用其他 subrake 文件中的任务。顺便说一下,那些任务可能与我的任务同名,这会有问题吗?

2个回答

7

我猜我的回答有点晚了,但是刚刚我也有同样的问题。因此这个解决方案可能对某些人有用。

Rakefile.rb

subrake = 'subrake'

task :default => :init

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

require "#{Dir.pwd}/#{subrake}"

subrake.rb

namespace :subrake do

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

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

end

我猜这段代码本身已经描述得很清楚了,但是我想强调一下。当你调用require时,你应该为subrake文件提供一个完整的路径(就像我的示例中那样),或者是'.\subrake'(如果它在工作目录中)。


5
如果您有多个子文件,可以尝试以下操作:
Dir.glob('**/*.rake').each { |r| import r}

task :init => ["subrake:init"] 

还可以创建一个名为sub.rake的文件,内容如下:

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

还有另一个名为foo.rake的文件

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

您可以在命令行中调用foorake:init,如下所示:

#rake foorake:init

或者将它添加到您的主要任务中,如下所示。
task :init => ["subrake:init", "fforake:init"]

我喜欢这个答案,因为它更接近 Minitest 和 RSpec 的工作方式,并且可以搜索特定类型的文件。 - FilBot3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接