在Rake中,我可以使用以下语法声明该任务charlie
需要任务alpha
和bravo
先完成。如何使用先决条件声明Rake :: PackageTask?
task :charlie => [:alpha, :bravo]
这似乎很好地工作,如果charlie
是一个典型的Rake任务或文件的任务,但我无法弄清楚如何为Rake::PackageTask
做到这一点。下面是Rake文件的相关部分迄今:
require 'rake/packagetask'
file :package_jar => [:compile] do
puts("Packaging library.jar...")
# code omitted for brevity, but this bit works fine
end
Rake::PackageTask.new("library", "1.0") do |pt|
puts("Packaging library distribution artefact...")
pt.need_tar = true
pt.package_files = ["target/library.jar"]
end
task :package => :package_jar
这里发生的事情是,对于一个干净的构建,它抱怨不“知道如何建立任务‘目标/ library.jar’” 。我必须从命令行手动运行rake package_jar
才能使其正常工作,这有点麻烦。 有什么办法可以让package
取决于package_jar
?
对于什么是值得的,我在Linux上使用Rake版本0.9.2.2和Ruby 1.8.7。
这工作,谢谢。不过,这看起来很疯狂,你不得不在他们出品的产品之后命名你的任务,而不是他们实际做的事!我不认为有解决办法,是吗? – ATG
@ATG在'file'任务的情况下,我认为在创建文件后命名它们是有意义的。你告诉Rake“这就是你创建这个文件的过程”,这意味着如果Rake需要创建文件(就像在这种情况下),它知道该怎么做。如果您希望能够以更简单的名称自行调用该任务,则始终可以添加'task:package_jar =>'target/library.jar'。 – matt
我明白你的观点,但我习惯于能够给我的任务/方法等描述他们所做的事情的有意义的名字。这看起来很奇怪,因为传统的构建任务(如“编译”和“测试”)是根据执行的操作而不是操作的结果命名的。无论如何,感谢您的帮助! – ATG