`
sqe_james
  • 浏览: 264383 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ANT 自动化构建

    博客分类:
  • J2EE
阅读更多

本文就日常开发中常用到的一些 ant task 作一些说明,假设项目目录层次如下:
[root dir]
   |-build.properties
   |-build.xml
   +--build build 任务生成
   +--db   数据库脚本及相关数据模型
   +--deploy   部暑目录及 war
   +--dist   jar 文件 
   --|-doc
     |--api   java doc
     |--test  测试报告
   +--etc   各种配置文件
   --|-lib
     |--core  用过的第三方库文件
     |--ext    测试或构建依赖包
   +--src
   +--test
   +--web   展示层相关文件
把一些常规的变量设置存放于 build.properties 中,这样利于构建文件的重用及常量变更。下面就以任务为单位讲起。

 

1.javac 编译

典型的 ant task 中一般如下设置 javac 任务:

<javac destdir="${build.dir}" target="1.5" source="1.5" debug="true">  
      <src path="${src.dir}" />  
      <classpath refid="classpath" />  
 </javac>

debug (default off) 编译时是否输出调试信息

optimize (default off) 指示编译时是否进行优化 。注意:从 JDK1.3 开始 sun javac 忽略这个标记。

target 指定生成 class 文件的 JVM 版本,一般取决于 ANT 实际运行的 JDK 版本。

fork(default on) 是否使用外部 JDK 编译

failonerror (default true) 编译出现错误时,build 将失败

如果还需要其它的编译参数设置,具体请参考官方文档 Javac 部分,里面有详细说明。

 

2.native2ascii 命令的 ant 支持

在处理 I18N 国际化编码时,非西欧字符集常会碰到一些乱码问题。虽然 JDK 自带了 native2ascii 转换工具,但调用起来不方便,如果使用 ANT 可以事半功倍地处理这个问题。 ant 中可以如下定义一个 native2asii 任务:

<native2ascii dest="${build.dir}" encoding="UTF-8" src="${etc.dir}/classes" includes="**/*_zh.properties" />

encoding 本地文件的编码,默认跟 JVM 编码相同

ext 重命名输出文件的扩展名

其它的可参考官网关于 Native2Ascii 的详细说明。

 

3.Junit 任务支持

在项目开发过程中常用到单元或集成测试,单纯依靠手动执行较容易混淆,时间长了很容易忘记,所以初期建立一个自动化任务很重要。antJunit 的支持已经相当不错了,足够平常测试使用,更重要的是能生成详细的测试报告,很有吸引力。下面是在 ant 中对一个 Junit 任务的定义。

<target name="tests" depends="build,buildtests" description="Run tests">
  <delete dir="${doc.dir}/test" />
  <mkdir dir="${doc.dir}/test" />
  <junit printsummary="on" failureproperty="tests.failed" showoutput="true">
    <classpath refid="classpath" />
    <formatter type="xml" />
    <batchtest todir="${doc.dir}/test">
      <fileset dir="${build.dir}">
        <include name="**/*Tests.*" />
        <exclude name="**/Jdbc*Tests.*" />
      </fileset>
    </batchtest>
  </junit>

  <fail if="tests.failed">
      ***********************************************************
      ****  One or more tests failed!  Check the output ...  ****
      ***********************************************************
  </fail>

  <junitreport todir="${doc.dir}/">
    <fileset dir="${doc.dir}/test">
      <include name="TEST-*.xml" />
    </fileset>
    <report format="frames" todir="${doc.dir}/test/html" />
  </junitreport>
</target>

<junit> ,定义一个junit task
  - <batchtest> ,位于<junit>中,运行多个TestCase
  - <test> ,位于<junit>中,运行单个TestCase
  - <formatter> ,位于<junit>中,定义一个测试结果输出格式
<junitreport> ,定义一个junitreport task
  - <report> ,位于<junitreport>中,输出一个junit report

 

junit 中的一些属性

printsummary (default no) 为每一个测试案例打印单行统计,可设置的值有on,off 和 withOutAndErr.其中 withOutAndErr on 基本相同,但前者能把测试输出写入到 System.outSystem.err 中。
fork
(default no) 在一个隔离的 VM 中运行测试
haltonerror
(default no) 在测试期间如发生错误将停止构建过程
haltonffailure(default no) 如测试失败将停止构建过程
showoutput 测试产生的任何输出将格式化并被发送到系统日志。默认情况下仅格式化输出。

formatter 中几个常用属性
type 预定义有 xml,plainbrief 格式,plain 格式会为所有测试案例给出一行概略统计,brief 仅为失败案例给出详细信息,而 xml 可以被转换为 html 文件,但不包含案例中的一些非法 XML 描述。也可以自己定义输出格式,只需实现 org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter 就行。

 

JUnitReport 内嵌元素 report 一些常用属性
format
(default frames) 生成报告的格式,必须为 "noframes""frames"
styledir 定义 stylesheets 的目录

 

关于ANT Junit 任务的其它更多最新信息请查看 ANT 官方文档,请分别参考 JUnitJUnitReport .

 

4. Javadoc API 文档生成

使用 ant 通过 javadoc 工具生成代码文档,在开发中很常见。javadoc 在处理 Java 源文件时会递归扫描符合规则的源文件目录。可以使用通配符来选择包名,来减少冗赘和管理的时间花费。这个任务不像 javac 能根据文件的变更来处理,所以每次运行时所有包都将被处理,辛好这个任务的使用频率不大。这个任务可以运行在所在 JDK 版本中,假使定义的属性高于运行版本将被乎略。下面给个一般定义的 javadoc 任务:

<javadoc classpathref="classpath" packagenames="${javadoc.pkg.name}.*" 
           sourcepath="${src.dir}" charset="${encode}" encoding="${encode}" 
           destdir="${doc.dir}" author="true" version="true" use="true" 
           windowtitle="${name} API">
  <doctitle><![CDATA[<h1>${name}</h1>]]></doctitle>
  <bottom><![CDATA[<i>Copyright©2007 ${organization}. All Rights Reserved.</i>]]></bottom>
  <tag name="todo" scope="all" description="To do:" />
</javadoc>

sourcepath 指定源文件路径
packagenames 逗号分隔包文件清单(带一个终止通配符)
classpathref 通过一个引用指定用户类路径
Use 分页创建类和包
Windowtitle 文档的浏览器窗口标题(文本)
charset 生成文档的跨平台视图字符集
Encoding 源文件编码名称
docencoding 输出文件的编码名称
Version 包含 @version 标签
link 根据给定 URL 创建链接到文档输出
bottom 每页包含的底部描述(html-code)
Doctitle 为首页的包包含一个标题(html-code)
tag 指定客户自定义标签,JDK 需大于等于1.4

 

更多关于 javadoc 的信息,请参考 javadoc task 官方文档。

 

5. manifest Jar 文件信息

打开 Java 的 JAR 文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个 MANIFEST.MF ,这个文件描述了该Jar文件的很多信息,下面将详细介绍 MANIFEST.MF 文件的内容:

<tstamp>
  <format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<manifest file="${deploy.dir}/${name}/META-INF/MANIFEST.MF">
  <attribute name="Built-By" value="${user.name}" />
  <section name="common">
    <attribute name="Specification-Title" value="Springapp example" />
    <attribute name="Specification-Version" value="${version}" />
    <attribute name="Specification-Vendor" value="${organization}" />
    <attribute name="Implementation-Version" 
         value="${jar.name}-${version.num}-b${build.number}" />
    <attribute name="Built-Date" value="${TODAY}" />
  </section>
</manifest>

上面 ant task 任务,首先定义了一个 tstamp 时间模式, 并在 <manifest> 中引用这个定义。接着定义了一些 manifest 的基本信息,<manifest> 标签中可以定义以下属性:
file 创建或更新的文件
mode (default replace)   "update""replace" 中的一个,
encoding (defaults UTF-8)   更新时读取已存在文件的编码

内嵌 <attribute> 标签属性
name 属性名,须匹配[A-Za-z0-9][A-Za-z0-9-_]*.
value 属性值
内嵌
<section> 可以有 <attribute> 标签属性

下面就一些常见的属性名作下说明
Manifest-Version   用来定义 manifest 文件的版本
Created-By   声明该文件的生成者,一般该属性是由 jar 命令行工具生成
Signature-Version   定义 jar 文件的签名版本
Class-Path   应用程序或者类装载器使用该值来构建内部的类搜索路径
Main-Class 定义 jar 文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar 来运行该jar文件
Implementation-Title   定义了扩展实现的标题
Implementation-Version   定义扩展实现的版本
Implementation-Vendor   定义扩展实现的组织  
Implementation-Vendor-Id   定义扩展实现的组织的标识
Implementation-URL   定义该扩展包的下载地址(URL)
Specification-Title   定义扩展规范的标题
Specification-Version   定义扩展规范的版本
Specification-Vendor   声明了维护该规范的组织
Sealed   定义jar文件是否封存,值可以是 true 或者 false


Jar 构建时会产生如下 MANIFEST.MF 文件信息:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_15-b04 (Sun Microsystems Inc.)
Built-By: Janwer

Name: common
Specification-Title: Springapp example
Specification-Version: 1.0
Specification-Vendor: Dematch Info Tech. Co.,Ltd
Implementation-Version: 1-b1
Built-Date: 2007-12-15 11:39:17

 

有关 Manifest 的更详细说明可参考SUN Mainfest 说明, 有关 manifest 任务可参考 ant manifest 说明档。

 

6. sql 任务

通过 JDBC 连接数据库能执行一系列 SQL 语句,也能从其 src 属性中指定 sql 文件读取文本语句。支持;分隔的多语句,也支持语句内的 -- 或 // 注解

<sql driver="${db.driver}" url="${db.url}" userid="${db.user}" password="${db.pw}" 
  onerror="continue" src="db/create_products.sql">
  <classpath refid="classpath" />
</sql>

src 指定SQL文件
encoding sql 文件的编码
onerror (default abort) 当执行sql脚本失败时,可继续( continue ) ,停止( stop ) ,中止( abort )
autocommit (default false) 对于数据库连接是否自动提交

 

如果还要更详细的信息请参考 ant sql 文档。

 

7. taskdef 任务定义

其主要功能是增加一些任务定义到当前项目中。如下定义了一个 tomcat reload 任务:

<path id="catalina-ant-classpath">
<!-- We need the Catalina jars for Tomcat -->
<!--  * for other app servers - check the docs -->
<fileset dir="${appserver.lib}">
  <include name="catalina-ant.jar" />
</fileset>
</path>
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
  <classpath refid="catalina-ant-classpath" />
</taskdef>

 <taskdef> 任务定义格式基本如上例所示。ant 文档中对它的说明很简短,可见 ant taskdef 官方对其描述。

 

其它的如 jar,war 等都比较简单,这里就不要描述,可参考文档来定义。附件中我给出了个日常使用的简单 build 定义,有兴趣可以看看。但 注意 :我的使用环境是(eclipse 3.3 + JDK 1.5) ,请根据自己的实际开发环境作相应的变更。

 

 

分享到:
评论

相关推荐

    jenkins+ant+jmeter自动化接口测试框架搭建

    JMeter起初设计时就支持使用Ant进行测试脚本的打包和构建,而Ant是一个广泛使用的Java库和命令行工具,用于自动化软件的构建和测试过程。而Jenkins是一个开源的自动化服务器,支持持续集成(CI)实践,能够自动执行...

    ant构建web项目

    ant 自动化构建eclipse web项目, 并且打包发布,启动tomcat和浏览器

    自动化测试系列一 ANT

    【描述】:“ANT自动化测试,包含ANT脚本” ANT(Apache Ant)是由Apache软件基金会开发的一款开源构建工具,它采用XML来定义构建过程,包括编译、打包、测试等任务。ANT脚本是ANT的核心,通过编写XML文件,可以...

    自动构建ant

    总的来说,Ant作为一款强大的自动化构建工具,虽然相比现代的构建工具如Maven和Gradle显得较为繁琐,但它的灵活性和广泛的社区支持仍然使其在特定场景下具有优势。通过深入理解Ant的构建文件和任务机制,开发者可以...

    DBMonster In Action 使用Ant自动产生数据库随机测试数据

    标题中的“DBMonster In Action 使用Ant自动产生数据库随机测试数据”揭示了这是一个关于数据库测试的实践教程,其中涉及到了DBMonster工具和Ant自动化构建工具。DBMonster通常用于生成大量模拟真实世界的数据库记录...

    nginx+tomcat的负载均衡session共享和ant构建全流程

    综合以上,我们可以构建一个完整的流程:使用ANT自动化构建Java项目,同时通过SVN管理代码版本,然后将构建好的应用部署到Nginx+Tomcat的架构中,实现负载均衡和Session共享。这样的架构不仅提高了系统的可用性和...

    eclipse下利用ant、junit进行自动化测试例子源码

    本示例主要展示了如何在Eclipse集成开发环境中利用ANT构建工具和JUnit单元测试框架进行自动化测试。以下是关于这些知识点的详细说明: 1. **Eclipse IDE**:Eclipse是一款流行的开源Java开发环境,支持多种语言的...

    ANT构建的一个问题

    它通过XML定义的构建文件来描述构建步骤,使得开发者可以自动化编译、打包、测试等任务。 在描述中提到的“NULL”可能是指在尝试解决这个问题时,遇到了空指针异常(NullPointerException)或者是某个预期的对象或...

    ant in action 2相关书籍

    《Ant in Action 2》是一本专注于Apache Ant自动化构建工具的专业书籍,主要面向Java开发者和系统管理员。Ant是Java世界中的一个关键构建工具,它允许开发者编写XML配置文件来定义项目构建过程,包括编译、打包、...

    基于Jmeter+Ant+SVN+Jenkins实现接口自动化测试

    最后,Jenkins是持续集成和持续交付工具,它可以自动化构建、测试和部署过程,使得接口自动化测试更加高效和可靠。 4. **Jenkins集成**: - **安装Jenkins插件**:如JMeter Plugin,用于解析JMeter测试结果并展示...

    利用ant脚本 自动构建svn增量.docx

    【Ant脚本自动构建SVN增量】是一种高效且节省资源的软件开发实践,它使得开发和测试团队能够自动化处理从代码提交到构建、打包、再到部署的整个过程。使用Ant,一个基于XML的构建工具,可以创建可重复执行的脚本来...

    Ant自动构建总结

    标题中的“Ant自动构建总结”指...总之,Ant作为Java项目自动化构建的重要工具,通过XML脚本进行灵活的配置,实现编译、测试、打包等构建任务。理解并熟练运用Ant,能极大提升开发效率,确保项目构建的一致性和可靠性。

    ant混淆打包

    在本场景中,我们关注的是使用Apache Ant自动化构建工具进行混淆打包的过程。Ant是一个基于Java的构建工具,能够帮助开发者自动化编译、测试和打包等任务。 首先,我们需要理解Ant的构建文件`build.xml`,这是Ant...

    JUnit+Ant+Jacoco整合 简单的Demo源码

    通过这个Demo,你不仅可以学习到如何使用JUnit编写和运行单元测试,还能了解到如何利用Ant自动化构建流程,以及如何使用Jacoco来衡量和提高测试覆盖率。这些都是Java开发中不可或缺的技能,对于理解和实践持续集成...

    android使用ant自动构建示例

    在Android开发过程中,自动化构建是提高效率和保持项目一致性的重要环节。Ant是Apache的一个开源构建工具,它允许开发者通过XML配置文件定义构建过程,适用于多种平台,包括Android。本示例将详细介绍如何在Android...

    Jenkins+Jmeter+ant接口自动化框架.docx

    Jenkins+Jmeter+ant 接口自动化框架 Jenkins、Jmeter 和 Ant 是三种不同的工具,它们之间可以结合使用,以实现自动化测试和接口自动化。本文将介绍如何使用 Jenkins、Jmeter 和 Ant 实现接口自动化测试,并将其应用...

Global site tag (gtag.js) - Google Analytics