12.5. 控制一个套件的内容

理论上,只有id和format才是一个合法套件描述符必要的元素;然而,对于大多数归档来说,如果输出归档中没有包含一个文件,该归档就会失效。套件描述符中,有五个主要的部分来定义哪些文件被包含到套件中,他们是:files, fileSets, dependencySets, repositories, 和moduleSets。为了最有效的探究这些部分,我们首先讨论最基本的部分:files。然后,我们接着讨论两个最常用的部分:fileSets和dependencySets。在你理解了它们如何工作之后,就能更轻松的理解repositories和moduleSets。

12.5.1. Files 元素

files元素是套件描述符中最简单的部分,它被设计成定义那些相对与你项目目录的路径。使用该元素,你就可以完全控制哪些文件被包含到你的套件中,它们如何被命名,以及它们在归档中的位置。

Example 12.6. 使用files在一个套件中包含一个JAR文件

<assembly>
  ...
  <files>
    <file>
      <source>target/my-app-1.0.jar</source>
      <outputDirectory>lib</outputDirectory>
      <destName>my-app.jar</destName>
      <fileMode>0644</fileMode>
    </file>
  </files>
  ...
</assembly>

假设你要构建一个名为my-app的版本为1.0的项目,Example 12.6, “使用files在一个套件中包含一个JAR文件”会将你项目的JAR文件包含到套件的lib/目录下,同时除去了文件名的版本部分,使最终的文件名为my-app.jar。该描述符会让这个JAR文件对于所有人可读,对于拥有者可写(这就是0664模式的意思,这里使用了Unix四位十进制数的权限标记)。要了解更多关于fileMode的值的格式的信息,请看维基百科的解释four-digit Octal notation

如果你知道所有需包含的文件的完整列表,你就可以使用file条目构建了一个十分复杂的套件。即使在构建开始之前你不知道这个完整的列表,你也可以使用一个自定义的Maven插件来发现这个列表,然后生成如上例中的套件描述符。files元素能给你提供细粒度的文件控制,包括每个文件的权限,位置及名称,但是在一个大型的归档中,为所有文件罗列file元素就比较繁琐了。因此大部分情况下,你需要使用fileSets针对一组文件进行操作。余下的四个文件包含配置元素,被设计用来帮助你包含整个一组匹配某个特定标准的文件。