rake使用-m调用任务两次

时间:2014-03-14 05:06:46

标签: ruby build rake rakefile

我正在构建一个具有钻石依赖性的Rakefile,

  A
 / \
B   C
 \ /
  D

和Rakefile如下。

task :default => :a

task :a => [:b, :c] do |t|
  puts "#{t.name}"
end

task :b => :d do |t|
  puts "#{t.name}"
end

task :c => :d do |t|
  puts "#{t.name}"
end

task :d do |t|
  puts "#{t.name}"
end

问题是使用多任务选项调用task :d两次。

$ rake -m
d
d
c
b
a

task :d是一个任务,应该在每次运行rake时调用,但在每次构建时都应调用一次。

我考虑使用filetask,但由于它实际上是一个向远程服务器发送信号的任务,因此该任务没有生成文件。

我还尝试了以下时间戳方法,但它没有做任何更改。

def (task(:d)).timestamp
  if @timestamp
    @timestamp
  else
    @timestamp = Time.now
  end
end

我该怎么做才能让它发挥作用?

2 个答案:

答案 0 :(得分:1)

由于rake是常规ruby,你可以使用每种正常的ruby技术来确保d后面的东西只进行一次。

实际上我用最新的rake版本尝试了你的例子,无法重现你的问题:

> rake --version
rake, version 10.1.0
> rake
d
b
c
a
> rake -m
d
b
c
a

答案 1 :(得分:0)

由于先决条件任务是按顺序运行的,因此从C中只有一个从属任务到D并且没有来自B的任务是有意义的。这样,您可以确保在D运行之前B和C都已运行。 / p>