`

ANT和build.xml模板和介绍

 
阅读更多
ant 脚本里面启动、停止tomcat的两种方法 http://blog.csdn.net/hardwin/article/details/7560843
Ant build.xml中的各种变量定义方式 http://blog.csdn.net/hittata/article/details/4744653
build.properties的使用 https://ant.apache.org/manual/Tasks/property.html
条件表达式:
nt 条件判断 condition http://www.blogjava.net/fingki/archive/2008/05/21/201919.html
ANT中的条件判断 http://blog.sina.com.cn/s/blog_68ef18a90100jvbi.html
ant利器之-逻辑判断 http://lwj0212.iteye.com/blog/1779689


命令行和ant脚本的参数传递 http://www.blogjava.net/zhyiwww/archive/2011/09/02/357823.html
	<property name="needSVN1" value="${needSVN}" />
	<target name="test">
		<echo message="${needSVN},${needSVN1}是window服务器" />
	</target>

调用:ant test -DneedSVN=true
输出:[echo] true,true是window服务器
说明:调用的时候给参数赋值, 那么在property或者target标签都可以直接引用.



如何在ant脚本中获取svn版本号 http://blog.csdn.net/edychang/article/details/12781671
http://www.oopsconsultancy.com/software/xmltask/下载xmltask.jar,存放得到ant的lib里面
只是一个很简单的任务:获取当前working copy的top svn revision,在已经安装了xmltask(http://www.oopsconsultancy.com/software/xmltask/)的前提下,我可以只靠一小段Ant脚本便可以完成这个任务:
<project name="GetSVNHeadRevision">  
      
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>  
      
    <property name="workingCopy" location="." />  
      
    <target name="default">  
        <exec dir="${workingCopy}" executable="svn">  
            <arg line="up" />  
        </exec>  
        <exec dir="${workingCopy}" executable="svn" output="svninfo.xml">  
            <arg line="info --xml ${workingCopy}" />  
        </exec>  
        <xmltask source="svninfo.xml">  
            <copy path="/info/entry/@revision" property="svn.head.rev" />  
        </xmltask>  
    </target>  
</project>

通过antcall执行后,top revision会被保存在"svn.head.rev"属性中。


build.xml 标签
1.<project>标签
(1) default表示默认的运行目标,这个属性是必须的。 
(2) basedir表示项目的基准目录。 
(3) name表示项目名。 
(4) description表示项目的描述。



2.<target>标签
(1).name表示标明,这个属性是必须的。 
(2).depends表示依赖的目标。 
(3)if表示仅当属性设置时才执行。 
(4)unless表示当属性没有设置时才执行。 
(5)description表示项目的描述。
 


3.<mkdir>标签
该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下: 
<mkdir dir=”${class.root}”/>



4.<jar>标签
该标签用来生成一个JAR文件,其属性如下。 
(1) destfile表示JAR文件名。 
(2) basedir表示被归档的文件名。 
(3) includes表示别归档的文件模式。 
(4) exchudes表示被排除的文件模式 


5.<javac>标签
该标签用于编译一个或一组java文件,其属性如下。 
(1).srcdir表示源程序的目录。 
(2).destdir表示class文件的输出目录。 
(3).include表示被编译的文件的模式。 
(4).excludes表示被排除的文件的模式。 
(5).classpath表示所使用的类路径。 
(6).debug表示包含的调试信息。 
(7).optimize表示是否使用优化。 
(8).verbose 表示提供详细的输出信息。 
(9).fileonerror表示当碰到错误就自动停止。 


6.<java>标签
该标签用来执行编译生成的.class文件,其属性如下。 
(1).classname 表示将执行的类名。 
(2).jar表示包含该类的JAR文件名。 
(3).classpath所表示用到的类路径。 
(4).fork表示在一个新的虚拟机中运行该类。 
(5).failonerror表示当出现错误时自动停止。 
(6).output 表示输出文件。 
(7).append表示追加或者覆盖默认文件。


7.<delete>标签
该标签用于删除一个文件或一组文件,去属性如下。 
(1)/file表示要删除的文件。 
(2).dir表示要删除的目录。 
(3).includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。 
(4).failonerror 表示指定当碰到错误是否停止,默认值是自动停止。 
(5).verbose表示指定是否列出所删除的文件,默认值为不列出。


8.<copy>标签
该标签用于文件或文件集的拷贝,其属性如下。 
(1).file 表示源文件。 
(2).tofile 表示目标文件。 
(3).todir 表示目标目录。 
(4).overwrite 表示指定是否覆盖目标文件,默认值是不覆盖。 
(5).includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝。 
(6).failonerror 表示指定如目标没有发现是否自动停止,默认值是停止。 
(7).verbose 表示制定是否显示详细信息,默认值不显示。


ant执行命令的详细参数
-buildfile<file>,-file<file>,-f<file> :要指定执行构件的的位置和名称。 
-find<file>,-s<file>: 查找构件文件,并执行找到的构件文件。 
-help,-p:显示ant的命令帮助信息。在命令行中显示ant的命令选项及简短的介绍,-h是简写。 
-version:显示ant 的版本信息。 
-diagnostics:显示ant项目的运行环境、依赖库等信息,为错误诊断和报告提供一些有用的帮助信息。 
-quiet,-q: 隐藏ant执行的提示输出信息。命令行将不会输出具体的target的执行信息。 
-verbose,-v: 显示ant执行的详细信息,包括操作系统和Java环境等信息。 
-debug,-d:显示ant执行调试的信息、详细的log信息。 
-lib<path>:指定一个类库所在的位置(jar文件位置),让ant工具可以使用这些类文件。path类型指定类库文件。 
-logfile<file>,-l<file>:指定ant执行时日志输出文件,让日志输出到指定文件而不在命令行输出。 
-D<property>=<value>:用于设定一些变量,这些变量可以在target中直接引用,或覆盖已设定的属性值


Ant系统属性
os.name:       操作系统的名称。 
basedir: 项目引用的根路径。 
ant.home:     Ant工具的根目录位置。 
ant.file: 构件文件的绝对路径。 
ant.version:   ant的版本信息。 
ant.java.version: ant检测到的JVM版本。 
ant.project.name: 当前执行的项目名称及信息。 
java.version: Java的版本信息。 
java.home:    Java的根目录位置。 
java.class.path: Java类库的文件的位置。 
line.separator:   换行符. 
user.home:    用户的home目录,在Linux和UNIX中经常甬道。 




获取并格式化日期或时间
4.12   Tstamp Task:获取并格式化日期或时间
Tstamp任务的作用是设定当前日期和时间的格式,可在target中使用。默认时日期的格式为yyyyMMdd(例如:20060516)。默认的时间格式为hhmm(例如:12:00)。默认时Ant工具设定TODAY(今天)格式为MMMM dd yy(例如:May 05 06)。这些格式与Java的日期格式相同。
4.12.1   Tstamp Task的属性及功能
Tstamp 任务包含以下属性:
(1)property:用于定义一个属性名称,通过这个属性可以得到Tstamp格式化后的日期或时间。
(2)pattern:用于设定要格式化时间或日期的格式,与Java中的SimpleDateFormat类中的格式相同。
(3)timezone:用于指定格式化时的时区,与Java中的timezone类中定义的相同。
(4)unit:用于设定与当时时间相差的单位。可设为millisecond(毫秒)、second(秒)、minute(分钟)、hour(小时)、day(日)、week(周)、month(月)和year(年)。
(5)offset:用于设定与当前时间相差的值,单位由unit设定。
(6)locale:用于指定格式化的locale值(不同国家和语言有不同的值)。与Java中的Locale类指定的i18n国际化功能相同。用不同国家的日期格式。
4.12.2   通过Tstamp Task格式化日期和时间的例子
用Tstamp格式化日期的时间的例子如下:
<?xml version="1.0"?>
<project name="timestamp" default="timestampTarget">
   <!-- //定义不同的日期格式    -->
<tstamp>
     <format property="TODAY_UK" pattern="d-MMMM-yyyy" locale="en"/>
   </tstamp>
   <tstamp>
     <format property="TODAY_CN" pattern="d-MMMM-yyyy" locale="zh"/>
   </tstamp>
   <tstamp>
       <format property="touch.time" pattern="MM/dd/yyyy hh:mm aa" offset="-5" unit="hour"/>
   </tstamp>
      <!-- //输出的日期格式定义   -->
     <target name="timestampTarget" >
         <echo message="${DSTAMP}"/>
         <echo message="${TODAY_UK}" />
         <echo message="${TODAY_CN}" />
         <echo message="${touch.time}" />
     </target>
</project>

保存文件为timestamp.xml,然后在命令行中运行ant –f timestamp.xml。
这个例子的作用是:
   ● 通过${DSTAMP}获取Ant默认的日期格式。结果为20060708。
   ● 设定日期格式为d-MMMM-yyyy且使用英文语言。结果为8-July-2006。
   ● 设定日期格式为d-MMMM-yyyy且使用中文语言。结果为8-七月-2006。
   ● 设定日期和时间格式为MM/dd/yyyy hh:mm aa,同时设定时间为当前时间减去5个小时。结果为07/08/2006 04:46 下午,执行时间21:46。


删除文件
(1)删除单个文件的实例:
<delete file="/lib/ant.jar"/>

这个例子的作用是删除lib目录下的ant.jar文件。
(2)删除目录的实例:
<delete dir="lib"/>

这个例子的作用是删除lib目录,包括这个目录的所有子目录及文件,可以通过include或exclude类型指定删除的部分文件,而不是目录下的所有文件。
(3)删除所有备份文件和空的目录的例子:
<delete includeEmptyDirs="true">
    <fileset dir="." includes="**/*.bak"/>
  </delete>



Ant build.xml (模板)
<?xml version="1.0"?>
<project name="your_porject_name" default="deploy-db">

    <!-- properies -->
     <!-- 定义一些常量 -->
    <property file="build.properties" />
    <property name="src.dir" value="${basedir}/src" />
    <property name="report.dir" value="${basedir}/report" />
    <property name="lib.dir" value="${basedir}/lib" />
    <property name="dist.dir" value="${basedir}/dist" />
    <property name="doc.dir" value="${basedir}/doc" />
    <property name="test.dir" value="${basedir}/test" />
    <property name="target.dir" value="${basedir}/target" />
    <property name="classes.dir" value="WebRoot/WEB-INF/classes" />
    <property name="target.classes.dir" value="${target.dir}/classes" />
    <property name="target.testclasses.dir" value="${target.dir}/test-classes" />
    <property name="webroot.dir" value="${basedir}/WebRoot" />
    <property name="db.dir" value="${basedir}/db" />
    
    <!-- 定义classpath -->
     <!-- 指明你所用到的jar包、class 文件存放的位置 -->
    <path id="master-classpath">
        <fileset file="WebRoot/WEB-INF/lib/*.jar" />
        <pathelement path="${webroot.dir}/WEB-INF/classes" />
    </path>

    <!--清除所有输出目录-->
    <target name="clean" description="清空所有输出目录">
        <echo message="清空所有输出目录"/>
        <delete dir="${target.classes.dir}" />
        <delete dir="${target.testclasses.dir}" />
        <delete dir="${target.dir}" />
        <delete dir="${dist.dir}" />
        <delete dir="${doc.dir}" />
    </target>
    
    <!-- 初始化任务 -->
    <target name="init" depends="clean">
    </target>

    <!-- 编译 -->
    <target name="compile" depends="init" description="编译所有的java类">
        <echo message="编译所有的java类"/>
        <mkdir dir="${target.classes.dir}" />
        <javac srcdir="${src.dir}" destdir="${target.classes.dir}" target="1.5">
            <classpath refid="master-classpath" />
        </javac>
    </target>

    <!-- 测试     -->
    <target name="test" depends="compile" description="进行单元测试">
        <mkdir dir="${report.dir}"/>
        <junit printsummary="on"
                haltonfailure="false"
                failureproperty="tests.failed"
                showoutput="true">
            <classpath refid="master-classpath" />
            <formatter type="plain"/>
            <batchtest todir="${report.dir}">
                <fileset dir="${classes.dir}">
                    <include name="**/*Test.*"/>
                </fileset>
            </batchtest>
        </junit>
        <fail if="tests.failed">
        ***********************************************************
        **** 存在一个或多个错误 ,请检查错误 ...... ****
        ***********************************************************
        </fail>
    </target>


    <!--打包成jar -->
    <target name="pack" depends="compile" description="打jar包">
    <echo message="生成your_project.jar"/>
     <mkdir dir="${dist.dir}" />
        <jar destfile="${dist.dir}/your_porject.jar" basedir="${classes.dir}">
            <exclude name="**/*Test.*" />
            <exclude name="**/Test*.*" />
        </jar>
    </target>
    
    <!-- WEB应用打成war包 -->
    <target name="war" depends="pack" description="打war包">
        <echo message="生成your_project.war"/>
     <mkdir dir="${dist.dir}" />
     <!-- jar命令 -->
     <!-- <jar destfile="${dist.dir}/your_project.war" basedir="${webroot.dir}">
     <exclude name="**/*Test.*" />
     <exclude name="**/Test*.*" />
     </jar> -->
     <!-- war命令 -->
     <war warfile="${war.dest}/anttest.war" webxml="${buildwar.dest}/WEB-INF/web.xml">  
            <lib dir="${buildwar.dest}/WEB-INF/lib"/>  
            <classes dir="${build.dest}"/>  
            <fileset dir="${buildwar.dest}"/>  
        </war> 
    </target>
    
    <!-- 部署到tomcat webapps目录下-->
    <target name="deploy-war" depends="war" description="部署到tomcat webapps 目录下">
        <echo message="部署your_project.war到tomcat的webapps下"/>
         <copy todir="${tomcat.dir}/webapps" overwrite="true" >
            <fileset dir="${dist.dir}">
         <include name="your_project.war"/>
            </fileset>
        </copy>
    </target>
    
    <!-- 部署mysql数据库文件 -->
    <target name="deploy-db" depends="deploy-war" description="初始化mysql数据库">
        <echo message="部署数据库文件到mysql的data目录下"/>
        <copy todir="${mysql.dir}/data" overwrite="ture">
            <fileset dir="${db.dir}">
         <include name="**/*.*" />
            </fileset>
        </copy>
    </target>
    <!-- 输出api文档 -->
    <target name="doc" depends="compile" description="创建api文档">
        <mkdir dir="${doc.dir}" />
        <javadoc destdir="${doc.dir}" author="true" version="true" use="true" windowtitle="Your Project API">
            <packageset dir="${src.dir}" defaultexcludes="yes">
         <include name="com/pack/**" /> <!--所包含的包,这里需要根据实际进行改变 -->
            </packageset>
            <doctitle>
         <![CDATA[<h1>Your Project description</h1>]]></doctitle>
            <bottom>
            <![CDATA[<i>Your companny Name,Inc,All Rights Reserved.</i>]]></bottom>
            <tag name="todo" scope="all" description="To do:" />
       </javadoc>
</target>
</project>






自动构建War包的Ant build.xml模板
<?xml version="1.0" encoding="UTF-8" ?>
<project name="[*****]你的项目的名称" default="deploy" basedir=".">
	<property name="src.dir" value="src"/>
	<property name="webcontent.dir" value="[*****]WebContent目录,根据你自己的具体来写,比如这里就是WebRoot"/>
	<property name="lib.dir" value="WEB-INF/lib"/> 
	<property name="web-inf.dir" value="${webcontent.dir}/WEB-INF"/>
	<property name="build.dir" value="build" />
	<property name="dist.dir" value="dist"/>
	<property name="tomcat.home" value="[*****]Tomcat的webapps所在的路径"/>
	
	<path id="project.classpath">
		<fileset dir="${webcontent.dir}/${lib.dir}">
			<include name="*.jar"/>
		</fileset>
	</path>
	
	<target name="clean">
		<delete dir="${build.dir}"></delete>
		<delete dir="${dist.dir}"></delete>
		<delete file="${tomcat.home}/${ant.project.name}.war"></delete>
		<delete dir="${tomcat.home}/${ant.project.name}"></delete>
	</target>
	
	<target name="init" depends="clean">
		<mkdir dir="${build.dir}/classes"/>
		<mkdir dir="${dist.dir}"/>
	</target>
	
	<target name="compile" depends="init">
		<javac srcdir="${src.dir}" destdir="${build.dir}/classes">
			<compilerarg line="-encoding UTF-8"/>
			<classpath refid="project.classpath"></classpath>
		</javac>
	</target>
	
	<target name="publish" depends="compile">
		<war destfile="${dist.dir}/${ant.project.name}.war" basedir="${webcontent.dir}" webxml="${web-inf.dir}/web.xml">
			<classes dir="${build.dir}/classes"></classes>
			<lib dir="${webcontent.dir}/${lib.dir}"></lib> 
			<fileset dir="WebContent"/>
		</war>
	</target>
	
	<target name="deploy" depends="publish">
		<copy file="${dist.dir}/${ant.project.name}.war" todir="${tomcat.home}"></copy>
	</target>
</project>
分享到:
评论

相关推荐

    ant的build.xml模板

    NULL 博文链接:https://siwind.iteye.com/blog/1473839

    Jmeter+ant实现测试报告build.xml和报告模板jmeter-results-newreport.xsl

    jmeter实现接口自动化测试: 1)buil.xml文件实现了测试报告和发邮件 2)优化后的报告模板:jmeter-results-newreport.xsl

    EJB集成ANT的build.xml配置模板

    EJB集成ANT的build.xml配置模板

    用ant编译J2ME代码的build.xml模板

    用ant编译J2ME代码的build.xml模板。该模板在本人项目中应用,测试通过。你的项目中只要修改Conf.properties中的变量路径和GEN.properties中的入口类名即可。

    Ant build.xml模版

    项目开发时就用的此模版,按照注释部分配置即可

    ant脚本-build.xml

    ant脚本例子,一个build.xml模板, 修改后直接运行。

    build源码---

    Ant之build.xml配置参数模板,源代码,修改后缀名即可

    ant安装文件+使用模板

    ant安装文件包括windows版本和linux版本,另外有ant使用模板配置文件

    Maven权威指南 很精典的学习教程,比ANT更好用

    比较Maven和Ant 1.8. 总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装Maven 2.3.3. 在Linux上安装Maven ...

    PythonAndroidTemplate.zip

    Python Android Template 是运行 Python 代码创建 Android 应用的 cookiecutter ... build.xml  custom_rules.xml  local.properties  LICENSE  proguard-project.txt  project.properties 标签:Python

    iuhyiuhkjh908u0980

    以下先列出初步的的ant构建文件的代码: build.xml &lt;?xml version="1.0" encoding=&quo ... by vb2005xu 2009-06-02 回复 (3) 相关讨论 持续集成简单总结 一、理论篇: 持续集成鼓励尽量短周期内项目团队的代码提交...

    helloworld_war_ant:带有构建的Ant示例

    Helloworld战争Java WAR项目/模板项目的示例包含: Helloworld Servlet(使用注释) 静态html文件示例最基本的web.xml 编译时servlet-api.jar(因此不需要Java EE) 用于构建WAR的Ant build.xml 使用slf4j-api和sl4j...

    Maven2 的新特性.7z

    • Maven1:project.xml、maven.xml、project.properties和build.properties。 • Maven2:pom.xml和settings.xml。 POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中使用,版本也由3升级...

    TemplateMode:用于在 Processing IDE 2.0 中扩展 Java 模式的模式模板

    用于处理 2.0 的模式模板 弗洛里安·杰内特马丁·利奥波德笔记默认情况下,这会扩展 JavaMode,因此您将获得熟悉的编辑器和您习惯的所有功能,这些功能来自您的模式中的 vanilla 处理。 如果您不想扩展 JavaMode,请...

    Struts in Action中文版

    1. 介绍.........................................................................................................18 1.1. 关于本书..........................................................................

    struts in Action

    1. 介绍.........................................................................................................18 1.1. 关于本书...........................................................................

    commons-beanutils-1.8.3 API.chm

    4、在一些XML配置的资源文件中,比如Ant Build脚本、Web应用发布描述符、Tomcat的server.xml文件等。 Java提供了反射机制的APIs(可以参看java.lang.reflect和java.beans packages),但是,这些APIs非常复杂难懂和...

    Java通用代码生成实用程序XDoclet(源码包)

    在Build.xml中的关于Xdoclet的配置如下: &lt;taskdef name="hibernatedoclet" classname="xdoclet.modules.hibernate.HibernateDocletTask"&gt; ${conf.hibernate}"&gt; ${src}"&gt; **/*.java" /&gt; ...

    java文集

    Java正则表达式 批量上传--采集 (多个文件夹) The Agile Way hibernate mapping文件中的标记详解:关系标记 ANT 安装使用及build.xml文档模板 inverse和cascade在关联更新中的作用 hibernate ...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    BlazeDS 将读取 services-config.xml 配置文件,该配置文件又引用了 remoting-config.xml、proxy-config.xml 和 messaging-config.xml 这 3 个配置文件,所以,一共需要 4 个配置文件。 由于 BlazeDS 需要将 Java ...

Global site tag (gtag.js) - Google Analytics