我有一个包含几个带有项目子目录的构建系统,其中每个子目录中都有一个单独的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必须包含默认任务的定义。