- 浏览: 1682230 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (335)
- uml (11)
- java (318)
- python (11)
- socket (2)
- ant (1)
- data structures (58)
- algorithms (67)
- concurrency (16)
- multithreading (16)
- mysql (2)
- ubuntu (2)
- c语言 (1)
- lucene (0)
- elasticsearch (0)
- django (1)
- 读书 观点 (2)
- 读书 (4)
- 观点 (4)
- collections (8)
- nio (1)
- io (2)
- 系统集成 (1)
- activemq (2)
- restful (0)
- web service (0)
- HttpClient (1)
- serializable (0)
- annotation (1)
- jdbc (3)
- classloader (0)
- regular expression (1)
- jpa (4)
- jvm (0)
- reflection (1)
- commons-pool2 (2)
- javamail (1)
- velocity (1)
- mathematics (3)
- graph (13)
- LeetCode (159)
- scala (0)
- spring (24)
- maven (5)
- spring batch (1)
- quartz (2)
- IOC (2)
- ORM (3)
- hibernate (2)
- aop (4)
- redis (0)
- zookeeper (0)
- spring mvc (4)
- ELK (1)
- string (1)
- gradle (1)
- mybatis (5)
- docker (0)
- servlet (0)
- log4j2 (1)
- html (0)
- css (0)
最新评论
-
nucleus:
貌似是因为图片的路径是http的缘故:http://dl2.i ...
spring container 实现分析:BeanWrapper -
nucleus:
nucleus 写道BeanWrapper这一块相关的类结构如 ...
spring container 实现分析:BeanWrapper -
nucleus:
BeanWrapper这一块相关的类结构如下图:文中提到的上述 ...
spring container 实现分析:BeanWrapper -
leshy:
inventory.sort(Comparator.compa ...
java8 lambda表达式学习总结 -
Leisurez:
di1984HIT 写道xuexile~hahaha~
activemq的几种基本通信方式总结
ant简单介绍
我们在平常的java开发过程中间,经常会处理一些这样的小任务,比如编译代码,运行测试代码,代码打包等。最常见的一些问题就是,如果用手工命令行来处理的话,需要敲很长的命令行,要在命令行里面指定各种参数。这样就很麻烦。如果用IDE来做呢,确实显得方便一点,可是不同的人拿到代码,用IDE打开,然后要来处理这些任务的时候,经常也需要配置classpath之类的各种路径。还是不够方便。总之,用命令行太啰嗦,用IDE则不够通用。还有,在某些特殊情况下,如果我们没有IDE,那该怎么办呢?别着急,我向您推荐自动化构建工具ant.
实际上我前面提到的问题基本上在编译型语言中都会面临。不同的平台已经有了对应的工具了,比如c语言平台的make, java平台的ant, maven.还有.net平台的msbuild。对于ant来说,我们基本上只需要写一个指示各种任务的配置文件,然后就可以重复的多次运行了。比如说,我们想要编译代码的时候,只要用一个ant build之类的命令就搞定了,不需要敲一堆的命令。
常用的概念和任务列表
ant本身的配置文件是一个xml文本。ant命令会默认的去查找当前目录的build.xml文件,如果写的配置文件不是默认命名为build.xml,就需要在命令里手工指定这个文件。基本上配置文件里面的结构如下:
一个build文件只是描述如何来构造一个project
如下所示,在文件的声明部分,会有一个project的xml节点,它是最外层的声明。
<project name="structured" default="archive"> <description>Compile and runs a simple program</description> </project>
在这个大的结构里面,可以针对该构建的项目进行下一步的任务细节划分。
一个project中间包含有多个target
这里每一个target对应着一个我们期望要完成的任务,比如说编译,运行代码或者测试等等。target的典型示例如下:
<target name="init"> <mkdir dir="build/classes" /> <mkdir dir="dist" /> </target> <target name="compile" depends="init" description="Compiles the source code"> <javac srcdir="src" destdir="build/classes" /> </target>
这里我们添加了两个target,一个是初始化构建过程的任务,主要就是创建两个目录。另外一个就是编译代码。通过在target里面配置和指定各种参数,我们就可以通过ant命令来执行这些target了。这里比较有意思的一点就是target之间会有一定的依赖关系。比如说,我们要运行代码的时候,起码代码要先编译了吧。那么我们就需要在运行的target上面指定depends的target,这样当要执行该target的时候,他所依赖的target会先执行。关于target之间的依赖,最典型的问题就是不要形成循环依赖,否则没法知道该先执行哪个后执行哪个。鬼打墙的道理,你懂的。
一个target可以包含有多个task
因为要执行一个target可能需要多个步骤,比如前面的init target,就通过两个mkdir task来创建两个目录。所以说一个具体的task就是一个具体的执行小步骤。包括执行一个javac的编译命令或者jar打包命令。
在实际的脚本中,我们还需要设置一些property来配置各种路径信息。总的来说,ant里面基本的概念就这么些几个,想想实在很简单。
一个简单的模版
现在,假设我们要做一个项目,然后用ant来管理构建的话,需要做哪些事呢?基本上来说需要从两个角度来考虑。一个就是整体项目结构布局,另外就是项目常用的任务。简单来说,需要有一下几个部分:
代码编译
我们的代码里面含有产品代码和测试代码,为了不让他们混淆在一起,我们需要做几个事。首先,让这两个部分的代码位于不同的目录里。另外,编译之后的代码最好不希望和源代码混在一起。常用的情况下,我们会把代码划分成两个部分:
main和test两个目录。编译后的代码可以考虑放在一个单独的bin目录中,里面包含有class-main, class-test两个目录,分别表示编译后的产品代码和测试代码。
类库引用
同样处于分离产品和测试的考虑,我们将产品代码需要引用的类库和测试需要的类库进行分离,我们将需要的类库放在名字为lib的目录里。里面分别放了lib-main和lib-test两个目录。
这样,整体来说,代码和类库这几个基本的目录结构就定下来了,目录引用图如下:
清除编译结果
还有一个比较常用的就是要清理编译后生成的class文件以及一些生成的测试统计结果文件。这个时候就需要设定一个clean的target,它的目的无非就是找到这些文件目录,然后删掉他们。
总的来说,只要设置好这样的目录结构并计划要执行哪些target,然后就可以来写build脚本了。一般来说除了这几个编译产品和测试代码的常用任务,还可能会包含一些其他的任务。下面是我整理的一个示例脚本:完整的示例和代码可以见附件。
<project name="SampleProject" default="compile"> <path id="classpath.main"> <fileset dir="lib/lib-main" includes="**/*.jar" /> </path> <path id="classpath.test"> <path refid="classpath.main" /> <pathelement location="bin/classes-main" /> <fileset dir="lib/lib-test" includes="**/*.jar" /> </path> <property name="junit.data" value="reports/junit/data" /> <property name="junit.html" value="reports/junit/html" /> <target name="clean"> <delete failonerror="false" includeemptydirs="yes"> <fileset dir="bin" includes="classes-*/**" /> </delete> </target> <target name="compile"> <mkdir dir="bin/classes-main" /> <javac srcdir="src/main" destdir="bin/classes-main" debug="on" classpathref="classpath.main" /> <mkdir dir="bin/classes-test" /> <javac srcdir="src/test" destdir="bin/classes-test" debug="on" classpathref="classpath.test"/> </target> <target name="test" depends="-test-run, -test-report" /> <target name="-test-run" depends="compile"> <mkdir dir="${junit.data}" /> <junit printsummary="yes" fork="true" haltonfailure="no"> <classpath> <path refid="classpath.test" /> <pathelement location="bin/classes-test" /> </classpath> <formatter type="xml" /> <batchtest haltonfailure="no" todir="${junit.data}"> <fileset dir="src/test" includes="**/Test*.java" /> </batchtest> </junit> </target> <target name="-test-report" depends="-test-run"> <mkdir dir="${junit.html}" /> <junitreport todir="${junit.data}"> <fileset dir="${junit.data}" includes="TEST-*.xml"/> <report format="frames" todir="${junit.html}" /> </junitreport> </target> </project>
这个示例中包含了编译代码,指定编译结果目录,然后执行测试,生成测试统计结果等任务。可以说,只要把这些任务和相关的依赖关系列出来,后面就相当于在每个任务里填空。
总结和引申
ant是一个简单易懂的构建管理工具。实际上大多数的项目构建过程都比较接近,如果能够从中间整理一个常用的模版,以后根据自己的需要稍微修改一下就可以运行,这样可以省下很多的精力。前面给的示例还有一些小的需要改进的地方,比如说clean的时候,有些测试统计的结果如果也需要清理的话,就需要修改。另外,其中也没有添加将编译后的文件打包的功能。在有的项目,还可以利用ant进行项目自动化部署的工作。
参考材料
Test driven PRACTICAL TDD AND ACCEPTANCE TDD FOR JAVA DEVELOPERS
发表评论
-
spring源代码分析:aop的实现
2018-10-03 23:32 740简介 在之前的文章里我们讨论过一些程序构建Pro ... -
java annotation基础
2018-06-30 16:41 887简介 之前有一篇简短的文章讨论过annotati ... -
spring源代码分析:annotation支持的实现
2018-09-03 23:31 2555简介 在之前的文章里,我们讨论了spring I ... -
spring container 实现分析:BeanFactory and ApplicationContext
2018-06-02 18:29 1473简介 在之前的文章里,我们讨论过作为spring ... -
spring aop: ProxyFactory
2018-04-30 16:45 842简介 在之前的文 ... -
日志与log4j2的配置和应用总结
2018-02-15 15:47 12322简介 通常我们在日常的应用开发中,日志起到一个非 ... -
Java servlet学习总结
2018-01-02 21:14 0简介 应用系统架构的演化(从CS到BS) ... -
spring container 实现分析:BeanWrapper
2018-02-19 18:10 1985简介 在之前的一篇文章里, 我们基于《Exper ... -
spring propertyeditor
2017-10-26 09:17 0pro spring 5 chapter 4, page ... -
spring bean life cycle
2018-02-25 13:30 930简介 在使用spring bean的过程中,有一个 ... -
spring container的设计与实现分析
2017-10-08 21:31 2776简介 在之前的一 ... -
jdbc数据访问的封装和演化
2017-09-16 17:00 2694简介 在使用传统jdbc的方式来访问数据的时候, ... -
Boyer Moore算法分析总结
2017-03-31 18:42 3558简介 在之前的文章里,对于字符串的搜索算法,我曾 ... -
mybatis学习总结:mybatis和spring, spring boot的集成
2017-03-04 18:07 2512简介 在前面的讨论里已经提到了mybatis的各种配置 ... -
mybatis学习总结:annotation与xml结合示例
2017-02-25 21:09 3708简介 在之前的文章里讨论过mybatis纯xml或者 ... -
mybatis学习总结:对象关系映射的xml配置实现
2017-02-19 23:03 4067简介 在之前的文章里已经讨论过mybatis的基本配 ... -
mybatis学习总结:annotation示例改进
2017-01-24 09:06 3445简介 在前一篇文 ... -
mybatis学习总结:基础示例
2017-01-21 23:30 901简介 mybatis是一个比较流行的ORM框架, ... -
gradle学习总结
2016-12-18 21:01 4633简介 Java的自动化构建工具比较多,从最开始的an ... -
String sort的几种方法
2016-10-16 23:07 2191简介 在之前的一 ...
相关推荐
apache-ant-1.9.2-bin.zip Ant帮助文档.docx 有文档结构视图,方便查阅 Ant 下载、安装、使用、教程全面了解 - edward0830ly的专栏 - 博客频道 - CSDN.NET.html 3个demo:build.xml自己随便写的,build-wsimport-...
"Ant ant ant antant ant ant antant ant ant ant" 这个描述可能是在强调Ant在项目构建过程中的重复性和不可或缺性,暗示着它在工程中的频繁使用和核心地位。 Ant的设计理念是“一切都是XML”,它通过XML格式的构建...
ant ant下载 ant配置ant ant下载 ant配置ant ant下载 ant配置
Apache Ant 是一个开源的构建工具,广泛用于Java项目构建,由Apache软件基金会开发。这个"apache-ant-1.6.5-bin.zip"文件是Ant的1.6.5版本的二进制发行版,适合在Windows操作系统上使用。Ant是基于Java的,它的主要...
开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6...
org.apache.tools.ant.Main org.apache.tools.ant.Task org.apache.tools.bzip2.CRC org.apache.tools.ant.Target org.apache.tools.ant.Project org.apache.tools.zip.ZipFile org.apache.tools.zip.ZipLong ...
标签中的"ant_1", "ant_1.6", "ant_1.6.0", "ant-1.6.0"和"apache-ant-1.6"都指的是Apache Ant的不同版本,1.6.0是其中的一个稳定版本,发布于2003年,提供了许多改进和新特性,比如支持JUnit 3.8,对ivy依赖管理...
### ANT文件详解:深入理解ANT及其在项目构建中的应用 #### Ant的概念与起源 Ant,全称为Apache Ant,是一款开源的、跨平台的项目构建工具,最初由James Duncan Davidson开发,现归属于Apache软件基金会Jakarta...
Apache Ant 是一个由Java编写的构建工具,它主要用于自动化软件项目的构建、编译、测试和部署过程。这个“ant工具ant资源包”很可能是Apache Ant的一个版本,具体为1.8.3。Ant以XML为基础来描述项目构建的规则和依赖...
在IT行业中,Ant是一个至关重要的自动化构建工具,尤其在Java开发领域中被广泛使用。Ant以其XML为基础的构建文件(通常命名为build.xml)为特点,允许开发者定义和执行项目的构建任务。现在,让我们深入探讨一下标题...
Axure AntDesign元件库是一款专为Axure设计的高质量组件集合,它旨在帮助原型设计师快速构建基于AntDesign设计系统的Web应用界面。AntDesign是阿里巴巴开源的一款著名前端UI框架,以其优雅、直观、高效的特性广受...
Apache Ant是Java开发中不可或缺的构建工具,它以其灵活性、可扩展性和跨平台特性而闻名。标题中的"ant1.9包下载"指的是Apache Ant 1.9系列的版本,这是该工具的一个重要里程碑,提供了许多增强的功能和修复了已知...
Ant是Apache软件基金会下的一个项目,它是一款强大的构建工具,主要用在Java环境中,用于自动化构建、测试和部署Java应用程序。Ant使用XML来描述构建过程和依赖关系,使得构建过程可配置且易于跨平台移植。 1. **...
Ant是Apache软件基金会下的一个Java项目,它是一个构建工具,主要用于管理Java项目的构建过程。Ant以其XML为基础的构建文件(build.xml)而著名,这些文件详细描述了如何编译、打包和测试Java应用程序。Ant的核心...
Apache Ant 是一个开源的构建工具,广泛用于Java项目管理,它是Apache软件基金会的产品之一。Ant以其XML为基础的构建文件(build.xml)而著名,这种文件定义了构建过程中的任务序列,使得开发人员能够自动化编译、...
### 关于Ant构建工具 #### 一、Ant简介 **Ant**是一款开源的Java构建工具,主要用于自动化构建过程,如编译、测试、部署等。它最初由James Duncan Davidson开发,现归属于Apache软件基金会。 ##### 1.1 什么是Ant...
**Ant Design Axure设计库详解** Ant Design是一个广泛使用的开源UI设计框架,源自阿里巴巴集团,专为构建高效、稳定且具有良好用户体验的Web应用而设计。它提供了丰富的组件库,覆盖了网页界面设计的各个方面,...
1,什么是ant ant是构建工具 2,什么是构建 概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个 3,ant的好处 跨平台 --因为ant是使用java实现...
December 19, 2006 - Ant 1.7.0 Available Apache Ant 1.7.0 is now available for download. Ant 1.7 introduces a resource framework. Some of the core ant tasks such as <copy/> are now able to ...