文件操作 - 创建归档文件

优质
小牛编辑
134浏览
2023-12-01

一个项目可以有很多 JAR 文件,你可以向项目中添加 WAR , ZIP 和 TAR 文档,使用归档任务可以创建这些文档: Zip , Tar , Jar , War 和Ear. 它门都以同样的机制工作.

例 15.19 创建一个 ZIP 文档

build.gradle

  1. apply plugin: 'java'
  2. task zip(type: Zip) {
  3. from 'src/dist'
  4. into('libs') {
  5. from configurations.runtime
  6. }
  7. }

所有的归档任务的工作机制和复制任务相同,它们都实现了 CopySpec 接口,和 Copy 任务一样,使用 from() 方法指定输入文件,可以选择性的使用 into() 方法指定什么时候结束.你还可以过滤文件内容,重命名文件等等,就如同使用复制规则一样.

重命名文档

projectName-vsersion.type 格式可以被用来生成文档名,例如:

例 15.20 创建压缩文档

build.gradle

  1. apply plugin: 'java'
  2. version = 1.0
  3. task myZip(type: Zip) {
  4. from 'somedir'
  5. }
  6. println myZip.archiveName
  7. println relativePath(myZip.destinationDir)
  8. println relativePath(myZip.archivePath)

使用 gradle -q myZip 命令进行输出:

  1. > gradle -q myZip
  2. zipProject-1.0.zip
  3. build/distributions
  4. build/distributions/zipProject-1.0.zip

上面例子使用一个名为 myZip的 Zip 归档任务生成名称为 zipProject-1.0.zip 的 ZIP 文档,区分文档任务名和最终生成的文档名非常的重要

可以通过设置项目属性 archivesBaseName 的值来 修改生成文档的默认名.当然,文档的名称也可以通过其他方法随时更改.

归档任务中有些属性可以配置,如表 15.1 所示:

表 15.1 归档任务-属性名

属性名类型默认值描述
archiveNameStringbaseName-appendix-version-classifier.extension,如果其中任何一个都是空的,则不添加名称归档文件的基本文件名
archivePathFiledestinationDir/archiveName生成归档文件的绝对路径。
destinationDirFile取决于文档类型, JAR 和 WAR 使用project.buildDir/distributions. project.buildDir/libraries.ZIP 和 TAR归档文件的目录
baseNameStringproject.name归档文件名的基础部分。
appendixStringnull归档文件名的附加部分。
versionStringproject.version归档文件名的版本部分。
classifierStringnull归档文件名的分类部分
extensionString取决于文档类型和压缩类型: zip, jar, war, tar, tgz 或者 tbz2.归档文件的扩展名

例 15.21 配置归档文件-自定义文档名

build.gradle

  1. apply plugin: 'java'
  2. version = 1.0
  3. task myZip(type: Zip) {
  4. from 'somedir'
  5. baseName = 'customName'
  6. }
  7. println myZip.archiveName

使用 gradle -q myZip 命令进行输出:

  1. > gradle -q myZip
  2. customName-1.0.zip

更多配置:

例 15.22 配置归档任务- 附加其他后缀

build.gradle

  1. apply plugin: 'java'
  2. archivesBaseName = 'gradle'
  3. version = 1.0
  4. task myZip(type: Zip) {
  5. appendix = 'wrapper'
  6. classifier = 'src'
  7. from 'somedir'
  8. }
  9. println myZip.archiveName

使用 gradle -q myZip 命令进行输出:

  1. > gradle -q myZip
  2. gradle-wrapper-1.0-src.zip

多个文档共享内容

你可以使用 Project.copySpec() 在不用归档文件间共享内容.
如果你想发布一个文档,然后在另一个项目中使用,这部分将在第 53 章 发布文档 中讲述.