在Rake中,我可以使用以下语法声明任务charlie
要求先完成任务alpha
和bravo
。
task :charlie => [:alpha, :bravo]
如果charlie
是典型的Rake任务或文件任务,这似乎工作正常,但我无法弄清楚如何为Rake::PackageTask
执行此操作。以下是rakefile的相关部分:
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
这里发生的事情是,对于干净的构建,它抱怨它“不知道如何构建任务'target / library.jar'”。我必须手动从命令行运行rake package_jar
才能使它工作,这有点令人讨厌。 我有什么方法可以让package
取决于package_jar
?
对于它的价值,我在Linux上使用Rake版本0.9.2.2和Ruby 1.8.7。
答案 0 :(得分:1)
当您运行rake package
(之前没有运行任何其他内容来创建任何所需文件)时,Rake发现包任务需要文件target/library.jar
。由于此文件尚不存在,因此Rake会检查它是否知道如何创建它。它不知道会创建此文件的任何规则,因此它会因您看到的错误而失败。
Rake 有一个它认为会创建一个名为package_jar
的文件的任务,而该任务实际上会创建文件target/library.jar
,但它没有意识到这一点
修复是告诉Rake确切地在file
任务中创建了哪个文件。然后Rake会自动找到依赖项。
更改
file :package_jar => [:compile] do
到
file 'target/library.jar' => [:compile] do
然后删除该行
task :package => :package_jar
因为package_jar
不再存在,Rake会自己找到对文件的依赖。
答案 1 :(得分:0)
通常在rake中,如果要向任务添加依赖项,则需要该任务的名称。因此,您需要确定Rake::PackageTask
正在注册的实际rake任务的名称。
最简单的方法是使用--trace
运行 - 它会在执行时列出每个任务的名称。
(我相信buildr包的名称是它生成的包的文件名,但我不记得。请使用--trace
查找。)
答案 2 :(得分:0)
您可以通过编写
为任何任务添加依赖项someTask.enhance [other, tasks]
其中other
和tasks
可以是任务名称或任务对象。
所以在你的情况下,你可以写:
library = Rake::PackageTask.new(...) do
...
end
task(:package).enhance([library])