ant 与svn

地址:http://tieba.baidu.com/p/800871177

构建的定义:构建就是把源代码转换成class文件的过程

构建解决的问题:研发给的class进行部署,然后我们就会发现研发给的东东有许多错误;给的class文件不是最新的;更甚至一个项目需要多个工程进行合并才能运行.

为什么要构建:一般研发是通过IDE工具进行构建的,当研发给出的错误的class文件时,压根在测试中就发现不了问题;所以我们要寻求另一种途径来编译class文件.
构建的主流程:先整合在一起,然后进行编译,生产jar包,最后自动部署到测试机上。

搭建自动构建环境:
1 安装版本控制工具(cvs或svn)
2 编译工具(或构建工具,代码走查工具)
3 邮箱

下面以java 在windows环境下为例:
1 安装cvs(或svn)工具
2 安装ant
   a)部署JDK环境,配置jdk环境变量
   b)下载ant包,然后进行解压;配置环境变量
   c)进入cmd,确定ant安装成功
   d)ant的介绍:ant的核心是build.xml 文件 以下是一个简单的build.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>

<project name="SVN Ant Test" default="start" basedir=".">

<taskdef resource="checkstyletask.properties" classpath="C:\Program Files\CruiseControl\apache-ant-1.7.0\lib\checkstyle-all-4.4.jar"/>

<property name="svn.user" value="yanshunhua"/>
<property name="svn.password" value="yanshunhua#6268"/>
<property name="svn.url" value=" http://192.168.0.85/svn/archives/PMO/team/shyan/temp"/>
<property name="local.dir" value="${basedir}"/>
<property name="classes" value="${basedir}\classes"/>
<property name="jar" value="hello.jar"/>
<property name="lib" value="${basedir}\lib"/>

     <target name="init">
<tstamp>
<format property="today" pattern="yyyyMMdd" offset="0" unit="day"/>
</tstamp>
<property name="tag.curr.no"   value="ITMaster_520_build_10006_${today}" />
<echo message="tag.curr.no:${tag.curr.no}" />
</target>

<target name="prepare" depends="init"   description="Prepare the dirs for other tasks">
<delete dir="src"/>
<delete dir="classes"/>
<delete dir="lib"/>
<delete dir="log"/>
<mkdir dir="classes"/>
<mkdir dir="lib"/>
<mkdir dir="log"/>
</target>

<!--SVN CheckOut-->
<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask" />
<target name="checkout" depends="prepare">
<svn username="${svn.user}" password="${svn.password}" javahl="true">
<checkout url="${svn.url}" revision="HEAD" destPath="${local.dir}" />
</svn>
</target>

<!--Src Checkstyle-->
<target name="checkstyle" depends="checkout">
<ant antfile="checkstyle_build.xml" output="${basedir}\log\checkstyle_build-${today}.log" />
</target>

<!--run-->
<target name="compile" depends="checkstyle">
<javac srcdir="${basedir}\src" destdir="${classes}"/>
</target>


<target name="clean" depends="compile">
<jar jarfile="${lib}\${jar}" basedir="${classes}"/>
</target>

<!--Findbugs-->
<target name="findbugs" depends="clean">
<ant antfile="findbugs_build.xml" output="${basedir}\log\findbugs_build-${today}.log" />
</target>

<!--Ant Email-->
<target name="email">
<mail mailhost="192.168.1.212" mailport="25" subject="Test Ant">
<from address="yanshunhua@mantis.com"/>
<to address="yanshunhua@mantis.com"/>
<!--<cc address="limeng@mantis.com"/>-->
<message>This is test</message>
<fileset dir="${basedir}">
      <include name="*.bak"/>
    </fileset>
</mail>
</target>

<target name="start">
<ant target="findbugs"/>
<ant target="email"/>
</target>
</project>

关于build.xml 简单介绍:
<?xml version="1.0" encoding="UTF-8" ?>   这是xml的头文件
<project> 根节点
<project name="SVN Ant Test" default="start" basedir=".">  
default是调用project根下面的某个target,name属性可以自己定义 ,basedir是根目录 注意到是basedir属性可以作为变量
<target>标签    target标签是把每一步功能划分开来

<target name="prepare" depends="init"   description="Prepare the dirs for other tasks">
<delete dir="src"/>
<delete dir="classes"/>
<delete dir="lib"/>
<delete dir="log"/>
<mkdir dir="classes"/>
<mkdir dir="lib"/>
<mkdir dir="log"/>
</target>

<!--SVN CheckOut-->
<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask" />
<target name="checkout" depends="prepare">
<svn username="${svn.user}" password="${svn.password}" javahl="true">
<checkout url="${svn.url}" revision="HEAD" destPath="${local.dir}" />
</svn>
</target>

第一个target作用是删除老文件夹,创建新文件夹,后面一个target是自动从svn上迁出源代码.

我们把代码迁出来了,我们会发现ant自动生成了3个文件夹分别是src,classes,lib。src文件夹是放源码的,classes和lib是空的,作用后面讲。
这一步做好,我们需要面临一个选择:1。直接编译,2。java代码走查;一般正规的需要进行代码走查,于是延伸出了另一个xml文件;

<ant antfile="checkstyle_build.xml" output="${basedir}\log\checkstyle_build-${today}.log" />

这个脚本的作用是调用外部的*_build.xml文件并生成log日志。

ant标签还支持文件的增,删,移动
<delete dir="src"/>,这个就是删除名为src的文件夹.   注意到是每次构建环境需要一个干净的环境。

<!--run-->
<target name="compile" depends="checkstyle">
<javac srcdir="${basedir}\src" destdir="${classes}"/>
</target>

这个就是编译的target,简单不?一行命令(哈哈)。javac是jdk的命令,srcdir="${basedir}\src"这个属性就定义需要编译的远文件路径.destdir="${classes}"这个属性是把编译好的class文件放入指定的目录.

<target name="clean" depends="compile">
<jar jarfile="${lib}\${jar}" basedir="${classes}"/>
</target>

这个是制作jar包,jar就是class文件的集合,所有的class文件按照一定的目录结构打包成*.jar文件.
OK。这个搞定了,我们有面临一个选择
还是代码走查.
但这个代码走查就不是单单检测java文件了,这里的代码走查还需要对class文件与jar包进行走查.

<!--Findbugs-->
<target name="findbugs" depends="clean">
<ant antfile="findbugs_build.xml" output="${basedir}\log\findbugs_build-${today}.log" />
</target>

这个就是另一个代码走查工具,当编译好后,需要发送构建完成文件邮件
<target name="email">
<mail mailhost="192.168.1.212" mailport="25" subject="Test Ant">
<from address="yanshunhua@mantis.com"/>
<to address="yanshunhua@mantis.com"/>
<!--<cc address="limeng@mantis.com"/>-->
<message>This is test</message>
<fileset dir="${basedir}">
      <include name="*.bak"/>
    </fileset>
</mail>
</target>

这个就是通过ant发送编译结果邮件的target

<mail mailhost="192.168.1.212" mailport="25" subject="Test Ant"> mailport是SMTP邮箱端口 subject是邮件标题
<from address="yanshunhua@mantis.com"/> 发件人
<to address="yanshunhua@mantis.com"/> 收件人
<cc address="limeng@mantis.com"/> 抄送 (还有一个秘抄标签)
<fileset dir="${basedir}"><include name="*.bak"/></fileset> 这个是加载附件,dir="${basedir}"这个是本地路径,<include name="*.bak"/>所要发送的文件类型 *.*表示所有文件类型

<target name="start">
<ant target="findbugs"/>
<ant target="email"/>
</target>

这是最后的,也是最最主要的,这个标签和<project name="SVN Ant Test" default="start" basedir=".">这个标签中的default属性做对应,还有每个target表中中的depends属性,必须先运行完毕依赖的target才能运行自己的target这个属性作用是依赖另一个target标签.

这就是ant的核心,build.xml的最基本的格式和内容.
如果配置不懂的 里面有详细介绍 http://tieba.baidu.com/f?kz=794016836
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值