2009-11-06 14 views
5

Tengo un sistema de compilación que consta de varios subdirectorios con proyectos, donde en cada uno de ellos hay un rakiefile separado (o un par de rakefiles). No, el directorio de nivel superior tiene un rakefile que pasa por todos los subdirectorios y llamadas rake a través de: system ("rake"), obtiene los paquetes resultantes y los envía a la máquina adecuada. ¿Hay una forma más elegante de hacer esto? He intentado con Rake.application.load() pero parece que no acepta ningún argumento sobre qué archivo debe cargarse (como ya mencioné a veces hay 2 rakefiles en cada subdirectorio),Rastrillo múltiple compilación

+0

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

Respuesta

2

Ok, tengo una solución que se basa en lo que knoopx dicho. Aquí está mi archivo maestro:

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 

Cada rakefile en subdirectorio debe contener la definición de la tarea predeterminada.

1

Solo crea un nuevo Rakefile en la raíz de su gran proyecto y dinámicamente cargar su sub-proyecto Rakefiles

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

Esto resuelve parcialmente el problema. Puedo llamar tareas desde otros archivos pero parece que las dependencias no se procesan. Así, con el archivo principal, con su código que llama sub Rakefile con tarea: por defecto =>: foo tarea: foo hacer pone "foo" final tarea "foo" no se llama – paszczi

Cuestiones relacionadas