class Rake::PackageTask
创建一个打包任务,将项目打包成可分发的文件(例如 zip 压缩文件或 tar 文件)。
PackageTask
将创建以下目标:
:package
-
创建所有请求的包文件。
:clobber_package
-
删除所有包文件。此目标会自动添加到主 clobber 目标。
:repackage
-
从头开始重建包文件,即使它们不是过期的。
"package_dir/name-version.tgz"
-
创建 gzip 压缩的 tar 包(如果 need_tar 为 true)。
"package_dir/name-version.tar.gz"
-
创建 gzip 压缩的 tar 包(如果 need_tar_gz 为 true)。
"package_dir/name-version.tar.bz2"
-
创建 bzip2 压缩的 tar 包(如果 need_tar_bz2 为 true)。
"package_dir/name-version.zip"
-
创建 zip 压缩文件包(如果 need_zip 为 true)。
示例
Rake::PackageTask.new("rake", "1.2.3") do |p| p.need_tar = true p.package_files.include("lib/**/*.rb") end
属性
包的名称(来自 GEM 规范)。
如果应该生成 gzip 压缩的 tar 文件 (tgz),则为 True(默认为 false)。
如果应该生成 bzip2 压缩的 tar 文件 (tar.bz2),则为 True(默认为 false)。
如果应该生成 gzip 压缩的 tar 文件 (tar.gz),则为 True(默认为 false)。
如果应该生成 xz 压缩的 tar 文件 (tar.xz),则为 True(默认为 false)。
如果应该生成 zip 文件,则为 True(默认为 false)。
用于存储包文件的目录(默认为 ‘pkg’)。
要包含在包中的文件列表。
用于 gzip 或 bzip2 压缩的 tar 命令。默认值为 ‘tar’。
包的版本(例如 ‘1.3.2’)。
如果应省略父目录,则为 True(默认为 false)。
用于 zip 压缩文件的 zip 命令。默认值为 ‘zip’。
公共类方法
使用给定的名称和版本创建包 Task
。使用 :noversion
作为版本来构建不带版本的包或提供完全版本的包名称。
# File rake-13.2.1/lib/rake/packagetask.rb, line 89 def initialize(name=nil, version=nil) init(name, version) yield self if block_given? define unless name.nil? end
公共实例方法
创建此任务库定义的任务。
# File rake-13.2.1/lib/rake/packagetask.rb, line 112 def define fail "Version required (or :noversion)" if @version.nil? @version = nil if :noversion == @version desc "Build all the packages" task :package desc "Force a rebuild of the package files" task repackage: [:clobber_package, :package] desc "Remove package products" task :clobber_package do rm_r package_dir rescue nil end task clobber: [:clobber_package] [ [need_tar, tgz_file, "z"], [need_tar_gz, tar_gz_file, "z"], [need_tar_bz2, tar_bz2_file, "j"], [need_tar_xz, tar_xz_file, "J"] ].each do |need, file, flag| if need task package: ["#{package_dir}/#{file}"] file "#{package_dir}/#{file}" => [package_dir_path] + package_files do chdir(working_dir) { sh @tar_command, "#{flag}cvf", file, target_dir } mv "#{package_dir_path}/#{target_dir}", package_dir if without_parent_dir end end end if need_zip task package: ["#{package_dir}/#{zip_file}"] file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do chdir(working_dir) { sh @zip_command, "-r", zip_file, target_dir } mv "#{package_dir_path}/#{zip_file}", package_dir if without_parent_dir end end directory package_dir_path => @package_files do @package_files.each do |fn| f = File.join(package_dir_path, fn) fdir = File.dirname(f) mkdir_p(fdir) unless File.exist?(fdir) if File.directory?(fn) mkdir_p(f) else rm_f f safe_ln(fn, f) end end end self end
绕过 “yield self” 和 “define” 步骤的初始化。
# File rake-13.2.1/lib/rake/packagetask.rb, line 96 def init(name, version) @name = name @version = version @package_files = Rake::FileList.new @package_dir = "pkg" @need_tar = false @need_tar_gz = false @need_tar_bz2 = false @need_tar_xz = false @need_zip = false @tar_command = "tar" @zip_command = "zip" @without_parent_dir = false end
将在此目录中构建此包
# File rake-13.2.1/lib/rake/packagetask.rb, line 178 def package_dir_path "#{package_dir}/#{package_name}" end
此包的名称
# File rake-13.2.1/lib/rake/packagetask.rb, line 172 def package_name @version ? "#{@name}-#{@version}" : @name end
包名称加上 .tar.bz2
# File rake-13.2.1/lib/rake/packagetask.rb, line 196 def tar_bz2_file "#{package_name}.tar.bz2" end
包名称加上 .tar.gz
# File rake-13.2.1/lib/rake/packagetask.rb, line 190 def tar_gz_file "#{package_name}.tar.gz" end
包名称加上 .tar.xz
# File rake-13.2.1/lib/rake/packagetask.rb, line 202 def tar_xz_file "#{package_name}.tar.xz" end
相对于 working_dir
的目标目录
# File rake-13.2.1/lib/rake/packagetask.rb, line 217 def target_dir without_parent_dir ? "." : package_name end
包名称加上 .tgz
# File rake-13.2.1/lib/rake/packagetask.rb, line 184 def tgz_file "#{package_name}.tgz" end
# File rake-13.2.1/lib/rake/packagetask.rb, line 212 def working_dir without_parent_dir ? package_dir_path : package_dir end
包名称加上 .zip
# File rake-13.2.1/lib/rake/packagetask.rb, line 208 def zip_file "#{package_name}.zip" end