标签:意义 comm 逻辑 javac tar 扩展性 指令 模型 ftp
构建文件+构建的输入输出+构建引擎+依赖管理器
构建文件
构建文件包含了构建所需的配置信息、定义外部依赖,例如第三方类库,还包含了以任务形式实现某个特殊目的的指令和它们的相互依赖关系。
构建的输入输出
一个任务会接收一个输入,然后执行一系列步骤,最后产生-一个输出。某些任务也许不需要输入,也不需要产生一个必要的输出。在复杂的任务依赖关系中,也许会使用一个依赖任务的输出作为输入。
构建引擎
构建文件的一.步步指令或者规则集必须被翻译成构建工具可以理解的内部模型。构建引擎会在运行时处理构建文件,解析任务之间的依赖,设置好执行所需要的全部配置。
一旦内部模型建立好了, 引擎就会按照正确的顺序去执行一系列任务。某些构建工具还允许你通过API去访问这个模型,以便在运行时获取构建信息。
依赖管理器
依赖管理器用于处理你在build文件中声明的依赖定义,从工件仓库(例如,本地文件系统、一个FTP或者HTTP服务器)中解析它们,并使它们对项目可用。依赖通常是指外部依赖,一种JAR文件形式的可重用类库(例如,Log4j 对日志的支持)。该仓库就像是依赖的储藏所,通过标识符组织和描述它们,例如名字和版本。
一个典型的仓库可以是HTTP服务器或者本地文件系统。
Apache Ant (Another Neat Tool)是一个用Java编写的开源构建工具。其主要目 的是在Java项目中为常用任务提供自动化,例如编译源代码、运行单元测试、打包 JAR文件和生成Javadoc文档。另外,它还为文件系统和存档操作提供了许多不同 的预定义任务。如果任何一个任务不满足需求,那么你就可以用Java写新的任务来 扩展构建。
虽然Ant的核心是用Java编写的,但是build文件是通过XML表示的,这样 就可以在任何运行时环境下使用了。Ant 不提供依赖管理器,所以你需要自己管理 外部依赖。然而,Ant 可以和另一个Apache项目Ivy 很好地集成,它是一个完善且独立的依赖管理器。要集成Ant和Ivy需要一些额外的工作, 而且要为每个独立的 项目手动配置。让我们一起看一个样例构建脚本。
示例:
<project name="my-app" default="dist" basedir=".">
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<property name="version" value="1.0"/>
<target name="init">
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source">
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}" classpath="lib/commons-lang3-3.1.jar" includeantruntime="false"/>
</target>
<target name="dist" depends="compile" description="generate the distribution">
<!-- Create the distribution directory -->
<mkdir dir="${dist}"/>
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
<jar jarfile="${dist}/my-app-${version}.jar" basedir="${build}"/>
</target>
<target name="clean" description="clean up">
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
缺点:
Maven选择约定优于配置的思想,这意味着它为你的项目配置 和行为提供了有意义的默认值。项目自然而然就知道去哪些目录寻找源代码以及构 建运行时有哪些task去执行。如果你的项目遵从默认值,那么只需要写几行XML 就可以建立-一个完整的项目。另外,Maven 也拥有为应用产生包含Javadoc 在内的 HTML格式项目文档的能力。
Maven的核心功能可以通过开发定制的插件来扩展。Maven的社区非常活跃,几乎支持构建的每个方面,从集成其他工具到生成报告,你都能够找到合适的插件。如果找不到满足需求的插件,你也可以自己去写。
示例:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
缺点:
可表达性的构建语言的底层API
Gradle 就是 Groovy:gradle 的 DSL 由Groovy 实现
灵活的约定:默认配置可轻松改变
鲁棒和强大的依赖管理
可扩展的构建:支持增量构建和部分构建
轻松的可扩展性:编写插件方便
和其他构建工具集成:支持 Ant 和 Maven 等的迁移和支持
标签:意义 comm 逻辑 javac tar 扩展性 指令 模型 ftp
原文地址:https://www.cnblogs.com/col-smile/p/13339460.html