Build tool

 

什么是构建工具编程

 

构建工具可以帮助你建立一个可重复的、可靠的、携带的且不须要手动干预的构建。构建工具是一个可编程的工具,它可以让你以可执行和有序的任务来表达自动化需求。假设你想要编译源代码,将生成的class文件拷贝到某个目录,而后将该目录组装成可交付的软件。以下图所示,展现了所描述场景中任务和它们执行的顺序。服务器

 

 

 

 

 

每一个任务都表明着一个工做单元——例如,编译源代码。顺序是很是重要的。若是所须要的class文件没有被编译出来,那么你是不可以组建构件的。所以编译任务必须先被执行。 
本质上,任务和它们的相互依赖被模块化成一个有向非循环图(DAG)。DAG是计算机科学的一种数据结构,包含下面两个元素: 
节点:一个工做单元;就构建工具而言,它指的是一个任务(例如,编译源代码)。 
有向边:有向边也叫做箭头,表示点节之间的关系。在这里,箭头表示依赖关系。若是一个任务的定义依赖于另外一个任务,那么所依赖的任务就必须先被执行。发生这种状况经常是由于一个任务依赖于另外一个任务的输出。这里有个例子——要执行任务“组装可交付软件”,你须要先执行任务“拷贝class文件到目录”和“编译源代码”。 
每一个节点都知道本身的执行状态。一个节点——表示一个任务——只能被执行一次。 
做为开发人员,你没有必要和DAG图打交道。这个工做是由构建工具来完成的。数据结构

 

构建工具的剖析
理解构建工具中组建的交互、构建逻辑和实际定义,以及输入输出的数据是很是重要的。让咱们一块儿来探讨一下构建工具中每个元素以及它们的职责。模块化

 

构建文件工具

 

构建文件包含了构建所需的配置信息、定义外部依赖,例如第三方类库,还包含了以任务形式实现某个特殊目的的指令和它们的相互依赖关系。 
就如前面的例子——编译源代码、拷贝class文件到目录以及组装构件——均可以定义在构建文件中。在一般状况下,会使用脚本语言来表达构建逻辑。这就是为何一个构建文件也叫作构建脚本的缘由。测试

 

构建的输入和输出ui

 

一个任务会接受一个输入,而后执行一系列步骤,最后产生一个输出。某些任务也需不须要输入,也不须要产生一个必要的输出。在复杂的任务依赖关系中,也许会使用一个依赖任务的输出做为输入。例如,咱们将源代码文件做为输入,将它们编译为class文件,并组装成可交付软件做为输出。编译和组装过程各表示一个任务。只有先编译了源代码,组装可交付软件才有意义。所以两任务须要保证它们的顺序。spa

 

构建引擎操作系统

 

构建文件的一步步指令或者规则集必须被翻译成构建工具能够理解的内部模型。构建引擎会在运行时处理构建文件,解析任务之间的依赖,设置好执行作须要的所有配置。 
一旦内部模型创建好了,引擎就会按照正常的顺序去执行一系列任务。某些构建工具还容许你经过API去访问这个模型,以便运行时获取构建信息。命令行

 

构建管理器

 

依赖管理器用于处理你在build文件中声明的依赖定义,从工件仓库(例如,本地文件系统、一个FTP或者HTTP服务器)中解析它们,并使它们对项目可用。一来一般是指外部依赖,一种JAR文件形式的可重用类库(例如,Log4j对日志的支持)。该仓库就像依赖的储藏所,经过标识符和描述它们,例如名字和版本。一个典型的仓库能够是HTTP服务器或者本地文件系统。 
许多类库还依赖于其余类库,这叫作传递依赖。依赖管理器能够经过存储在仓库中的元信息自动的解析传递依赖。可是一个构建工具并不要求提供这样的依赖管理组件。

 

 

构建工具 —— 让项目变得自动化

自动化的好处

项目自动化对于团队的成功是很是的重要的。现在,发布时间对于市场变得比之前更重要了。可以以一种可重复、可持续的方式构建和交付软件是关键。接下来看一看项目自动化所带来的好处:

防止手动介入

不得不手动地执行每一步去实现和交付软件是耗时且易于犯错的。坦白地说,做为一个开发人员和管理员,比起编译过程和拷贝文件,还有更重要的事情要作。咱们都是人,不免会犯错,并且手动加入还会占用你真正作实际事情的时间。软件开发过程当中的任何一步都是可以且应该被自动化的。

建立可重复的构建

软件的构建一般都是有预约义和有序的步骤。好比,你须要先编译源代码,而后运行测试,最后组装可交付软件。你将须要天天一遍又一遍的重复运行相同的步骤。这应该和按一下按钮同样简单。不管是谁在运行该构建,构建过程的结果都应该是可重复的。

让构建携带

你能够发现,可以在IDE(集成开发环境)中运行的构建是很是有限的。首先,你必须将特定的产品安装在机器上。其次,IDE也许只适用于某一种操做系统。一个自动化构建不该该依赖于特定的运行环境才能工做,不管是操做系统仍是IDE。最佳的方式应该是,自动化任务从命令行运行,它容许你在任什么时候间和任何一台想要运行构建的机器上运行。

相关文章
相关标签/搜索