2009-11-06 7 views
5

프로젝트가있는 여러 하위 디렉토리로 구성된 빌드 시스템이 있습니다. 각 시스템에는 별도의 rakiefile (또는 두 개의 레이크 파일)이 있습니다. 최상위 디렉토리에는 모든 하위 디렉토리를 통과하는 rakefile이 없으며 system ("rake")을 통해 rake를 호출하고 결과 패키지를 가져 와서 적절한 시스템으로 보냅니다. 이 일을 더 우아한 방법이 있습니까? 나는 Rake.application.load()를 시도했다. 그러나 어떤 파일을로드해야하는지에 대한 인수를 받아들이지 않는 것 같다. (각 하위 디렉토리에 2 개의 레이크 파일이 있다고 언급했기 때문에)멀티 파일 레이크 빌드

+0

관련 https://stackoverflow.com/questions/28238838/rakefile-to-process-multiple-projects –

답변

2

확인을로드합니다. 다음은 나의 마스터 파일입니다 :

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

새로운 당신의 큰 프로젝트의 루트에 Rakefile 동적으로 내가 말한 knoopx을 기반으로 솔루션을 가지고, 귀하의 하위 프로젝트 Rakefiles

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

이것은 부분적으로 문제를 해결합니다. 다른 파일에서 작업을 호출 할 수 있지만 종속성이 처리되지 않은 것처럼 보입니다. 그래서 와 하위 rakefile를 호출하는 코드로, 주요 파일을 가진 작업 : 기본 => foo는 작업 : foo는 는 "foo는" 작업 "foo는"이 호출되지 않습니다 끝을두고 할 – paszczi