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

最佳答案

好的,我有基于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必须包含默认任务的定义。

08-06 19:26