多文件 rake 构建

发布于 2024-08-10 10:54:55 字数 235 浏览 6 评论 0原文

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

I have a build system that consists of several subdirectories with projects, where in each of them there's a separate rakiefile (or couple of rakefiles). No the top-level directory has a rakefile that goes through all subdirectories and calls rake via: system("rake "), gets resulting packages and sends them to appropriate machine. Is there more elegant way of doing this? I've tried Rake.application.load() but this doesn't seem to accept any argument as to which file must be loaded (as I've mentioned sometimes there are 2 rakefiles in each subdirectory),

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

野却迷人 2024-08-17 10:54:55

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

Ok, I have solution that is based on what knoopx said. Here is my master file:

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

Each rakefile in subdirectory must contain definition of default task.

两个我 2024-08-17 10:54:55

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

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

Just create a new Rakefile at the root of your big project and dynamically load your sub-project Rakefiles

Dir.glob(File.join(File.dirname(__FILE__), '**', 'Rakefile')).each do |tasks|
  load tasks
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文