Ruby rake使用-m调用一个任务两次

Ruby rake使用-m调用一个任务两次,ruby,build,rake,rakefile,Ruby,Build,Rake,Rakefile,我正在建造一个有钻石依赖性的耙子 A / \ B C \ / D 耙形锉如下所示 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

我正在建造一个有钻石依赖性的耙子

  A
 / \
B   C
 \ /
  D
耙形锉如下所示

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,但因为它实际上是一个向远程服务器发送信号的任务,所以该任务不会生成任何文件

我还尝试了下面的timestamp方法,但没有做任何更改

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

我应该怎么做才能使它工作?

既然先决条件任务是按顺序运行的,那么从C到D只有一个依赖任务,而不是从B到D有意义吗,您可以确保B和C都在D运行之前运行。

因为rake是常规的ruby,所以您可以使用所有常规的ruby技术来确保D后面的东西只运行一次

事实上,我用最近的rake版本尝试了您的示例,但无法重现您的问题:

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

Prereq任务不是按顺序运行的,但是如果您
rake-m
,则会并发运行。在这种情况下,我将跳过并发任务。