【问题标题】:Multifile rake build多文件 rake 构建
【发布时间】:2009-11-06 10:38:18
【问题描述】:

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

【问题讨论】:

标签: rake


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这部分解决了问题。我可以从其他文件调用任务,但似乎没有处理依赖项。所以有主文件,你的代码调用 sub rakefile with task :default => :foo task :foo do puts "foo" end task "foo" 不会被调用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多