我正在构建一个具有钻石依赖性的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
我该怎么做才能让它发挥作用?
答案 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>