如何阻止Rake不必要地执行具有依赖性的文件任务?

问题描述 投票:1回答:1

仅当以其命名的文件尚不存在时,才应执行Rake中的文件任务。

我有一个在该目录中构建directory的文件任务和一个在该目录中创建file的文件任务。现在,除非目录存在,否则无法创建文件,因此我将目录任务设置为文件任务的依赖项:

file "directory" do
  mkdir_p "directory"
end

file "file" => "directory" do
  touch "directory/file"
end

desc "Create file"
task build: "file"

[当我第一次在这里运行build任务时,一切都按计划进行:首先创建目录,然后创建文件:

$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time)
** Execute directory
mkdir -p directory
** Execute file
touch directory/file
** Execute build

在创建文件及其包含目录之后第二次运行该文件时,我希望Rake不执行任何操作(not_needed),因为与文件任务相关的所有文件均已存在。而是跳过目录任务,但执行文件任务:

$ rake -t build
** Invoke build (first_time)
** Invoke file (first_time)
** Invoke directory (first_time, not_needed)
** Execute file
touch directory/file
** Execute build

如果filedirectory都已经存在,如何使Rake不运行file任务?

ruby rake rakefile
1个回答
2
投票

您的文件任务是错误的。它声明好像在根目录中创建了file,但实际上在file目录中创建了directory。 Rake检查file是否在根目录中,如果不存在,则运行该任务。为了使其正常工作,您需要重命名file任务:

file "directory/file" => "directory" do
  touch "directory/file"
end

desc "Create file"
task build: "directory/file"

通过这种方式,Rake检查正确的文件是否存在,并且不运行“目录/文件”任务。

** Invoke build (first_time)
** Invoke directory/file (first_time, not_needed)
** Invoke directory (first_time, not_needed)
** Execute build
© www.soinside.com 2019 - 2024. All rights reserved.