多文件rake构建

时间:2009-11-06 10:38:19

标签: rake

我有一个构建系统,它由几个带有项目的子目录组成,每个子目录中都有一个单独的rakiefile(或几个rakefiles)。没有顶级目录有一个遍历所有子目录的rakefile并通过:system(“rake”)调用rake,得到生成的包并将它们发送到适当的机器。这样做有更优雅的方式吗?我已经尝试过Rake.application.load()但是这似乎不接受任何关于必须加载哪个文件的参数(正如我曾经提到的,有时每个子目录中有2个rakefiles),

2 个答案:

答案 0 :(得分:2)

好的,我的解决方案基于knoopx的说法。这是我的主文件:

task :default do
    FileList["*/**/rakefile*.rb"].each do |project|
        # clear current tasks
        Rake::Task.clear
        #load tasks from this project
        load project
        if !Rake::Task.task_defined?(:default)
            puts "No default task defined in #{project}, aborting!"
            exit -1
        else
            dir = project.pathmap("%d")
            Dir.chdir(dir) do
                default_task = Rake::Task[:default]
                default_task.invoke()
            end
        end
    end
    puts "Done building projects"
end

子目录中的每个rakefile都必须包含默认任务的定义。

答案 1 :(得分:1)

只需在大项目的根目录下创建一个新的 Rakefile ,然后动态加载子项目 Rakefiles

Dir.glob(File.join(File.dirname(__FILE__), '**', 'Rakefile')).each do |tasks|
  load tasks
end