# 6.8构建管理工具

构建管理工具支持源代码和相关工件的版本控制自动化、编译、打包、测试和检查任务。\
这些包括:\
• 翻译和转换任务的管理(编译、链接、部署)\
• 持续集成管理\
• 依赖管理(参见章节6.9)\
• 自动化测试的执行和报告\
• 检查是否符合结构规范和编程约定

#### &#xD;6.8.1需求和决策标准

• 构建过程可定义（即，可以根据系统特定的基础定义构建所需的步骤）\
• 传递依赖的最小化解（即在构建运行中重新翻译或重新链接绝对必要的最少文件数量）\
• 与版本和配置管理工具、代码分析、自动化测试的执行及其相关报告的集成\
• 持续集成工具和流程的界面\
• 支持不同的编程语言和工具\
• 构建过程运行的速度

#### &#xD;6.8.2构建管理工具面临的挑战

• 大型系统的构建管理是资源密集型的\
• 构建的描述/定义需要与部署视图中的决策同步\
• 目前对于构建描述没有既定的标准语法/语言。大多数构建工具使用自己的语言/语法。\
• 系统使用多种编程语言（多语言编程）构建，包括编译和解释系统的混合

#### &#xD;6.8.3 示例

• Apache Ant(构建工具，主要用于Java系统，使用XML进行任务描述)\
• Apache Buildr(许多Java虚拟机语言的构建系统)\
• Apache Ivy(支持Java构建，能够从存储库后续加载所需库的特定版本)\
• Apache Maven(用于广泛构建任务的构建工具，为目录和文件结构指定约定，使用分层组织的XML文件进行定义)\
• Gant或Gradle (Ant等价于Groovy)\
• Make、NMake(此类中的原始工具)\
• Rake (Ruby的Make工具)\
• Team Foundation Server(微软商业构建和代码管理)
