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