借助Ant工具,实现快速开发
当一个项目大了以后,每次重新编译,打包,运行等就会变得复杂、费时、重复,在c语言中有make脚本进行这些工作的批量完成,那么在java中,我们可以使用Ant。
Ant是一个构建工具,可以完成这些任务:编译java源代码、运行java程序、拷贝文件或目录、将编译完成的类打包等等。
而且,Ant允许我们按照自己的方式,添加自己的任务(Task),比如通过Xdoclet完成项目中的hibernate文件生成。
直接使用范例,那些基础知识看来枯燥无味,我会把他们放到最后,如果例子看不明白,再去看基础知识也不迟。
使用Ant进行:j2ee项目打包发布,hibernate相关文件生成
<?xml version="1.0" encoding="GBK"?>
<project name="测试ANT" basedir=".">
<!--资源文件位置-->
<property name="src.dir" value="${basedir}/src" />
<!--编译的目标位置-->
<property name="classes" value="${basedir}/build/classes" />
<!--打包的目标位置-->
<property name="build" value="${basedir}/build" />
<!--Lib的位置-->
<property name="lib" value="${basedir}/WebContent/WEB-INF/lib" />
<!--tomcat.webapps位置-->
<property name="webapps" value="D:/tomcate/apache-tomcat-7.0.39/webapps" />
<!--Xdoclet.Home-->
<property name="xdoclet.home" value="D:/oa/xdoclet-plugins-1.0.3" /> <!-- Build classpath 指定定lib所在位置-->
<path id="classpath">
<fileset dir="${lib}">
<include name="*.jar" />
</fileset>
</path> <!-- 删除build 路径-->
<target name="删除build 路径">
<delete dir="${build}" />
</target> <!-- 建立build/classes 路径,并编译class 文件到build/classes 路径下-->
<target name="建立build/classes 路径,并编译class 文件到build/classes 路径下" depends="删除build 路径">
<mkdir dir="${classes}" />
<javac srcdir="${basedir}/src" destdir="${classes}">
<classpath refid="classpath" />
</javac>
<copy todir="${classes}">
<fileset dir="${src.dir}">
<include name="**/*.xml" />
<include name="**/*.properties" />
</fileset>
</copy> </target> <!-- 打war 包-->
<target name="打war 包" depends="建立build/classes 路径,并编译class 文件到build/classes 路径下">
<war destfile="${build}/WebTest1.war" webxml="${basedir}/WebContent/WEB-INF/web.xml"> <!-- 拷贝WebContent下所有文件-->
<fileset dir="${basedir}/WebContent" /> <!-- 拷贝lib 目录下的jar 包-->
<lib dir="${lib}" />
<!-- 拷贝build/classes 下的class 文件-->
<classes dir="${classes}" /> </war> <delete dir="${classes}" /> </target> <!--发布到本地tomcat-->
<target name="发布到本地tomcat" depends="打war 包">
<copy file="${build}/WebTest1.war" tofile="${webapps}/WebTest1.war" />
</target> <!-- 下面是借助xdoclet,进行自定义任务,完成hibernate相关文件生成 -->
<!--
xdoclet通过对源文件进行扫描,并读取源文件中的注释,然后生成相应的配置文件,因此xdoclet有自己的一套注释规则,详细看文档。
-->
<!-- Build classpath -->
<path id="xdoclet.task.classpath">
<fileset dir="${xdoclet.home}/lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="${xdoclet.home}/plugins">
<include name="**/*.jar" />
</fileset>
</path> <taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref="xdoclet.task.classpath" /> <!--生成Hibernate配置文件-->
<target name="生成Hibernate配置文件" depends="生成hibernate映射文件">
<xdoclet>
<fileset dir="${src.dir}/com/tch/model">
<include name="**/*.java" />
</fileset>
<component
classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin"
destdir="${src.dir}"
version="3.0"
hbm2ddlauto="update"
jdbcurl="jdbc:mysql://127.0.0.1/oa"
jdbcdriver="com.mysql.jdbc.Driver"
jdbcusername="root"
jdbcpassword="123456"
dialect="org.hibernate.dialect.MySQLDialect"
showsql="true"
/>
</xdoclet>
</target> <!--生成hibernate映射文件-->
<target name="生成hibernate映射文件">
<xdoclet>
<fileset dir="${src.dir}/com/tch/model">
<include name="**/*.java" />
</fileset>
<component
classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin"
version="3.0"
destdir="${src.dir}" />
</xdoclet>
</target>
</project>
基础
1、搭建环境
- 确保你的机器已经安装了JDK,确保你的path环境变量中包含有java虚拟机的运行程序,确保你的环境变量中有JAVA_HOME变量
- 下载ant并解压
- 设置ANT_HOME环境变量,指向ant解压根目录
- 在path环境变量中,添加%ANT_HOME%\bin目录
- 打开控制台,运行:ant
- 如果能够运行ant(忽略这些异常:Buildfile: build.xml does not exist!),而不是出现诸如命令无法解释的错误,那么你的ant就安装成功了
2、基本元素
bulid.xml
<?xml version="1.0" encoding="GBK"?>
<project name="ant测试" default="getBaseDir" basedir="D:\antTest"> <!--基本元素-->
<target name="getBaseDir">
<description>
the first example!
</description>
<echo message="hello world!" />
</target> <target name="targetA" if ="ant.version">
<echo message ="Java Version: ${ant.version}"/>
</target> <target name="targetC" depends ="targetA" unless ="anotherTarget" >
<description>
show depends,unless,basedir,if
</description>
<echo message ="The base dir is: ${basedir}"/>
</target> <!--property-->
<property name="name" value="jim" />
<property name="age" value="18" /> <target name="targetD" >
<echo message="name:${name},age:${age}" />
</target> <!--echo-->
<target name="targetEcho">
<echo message="Hello,ANT" file="herfile/hello.log" append="true" />
</target>
</project>
project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。
1) name 属性
用于指定 project 元素的名称。
2) default 属性
用于指定 project 默认执行时所执行的target 的名称。
3) basedir 属性
用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录作为基准目录。
target 元素
target为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target 可以存在相互依赖关系。它有如下属性:
1) name 属性
指定 target 元素的名称,这个属性在一个project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。
2) depends 属性
用于描述 target 之间的依赖关系,若与多个target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target 。被依赖的 target 会先执行。
3) if 属性
用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行。
4) unless 属性
该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。
5) description 属性
该属性是关于 target 功能的简短描述和说明。
property 元素
property元素可看作参量或者参数的定义,project 的属性可以通过 property元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引入:
<property file=”build.properties”/>
property 元素可用作 task 的属性值。在 task 中是通过将属性名放在“ ${”和“ } ”之间,并放在 task 属性值的位置来实现的。
3、常用命令
build.xml
<?xml version="1.0" encoding="GBK"?>
<project name="ant测试" default="getBaseDir" basedir="D:\antTest">
<!--常用命令--> <!--copy-->
<target name="targetCopy">
<copy file="myfile/hello.txt" tofile="herfile/copied.txt"/>
<copy todir="hisfile"> <fileset dir="myfile"/></copy>
</target> <!--delete-->
<target name="targetDelete">
<delete file="myfile/hello.txt" />
<delete dir="myfile" />
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak" />
</delete>
</target> <!--mkdir-->
<target name="targetMkdir">
<mkdir dir="/myfile/src/build/classes"/>
</target> <!--move-->
<target name="targetMove">
<move file="destfile.txt" tofile="hello.txt"/>
<move file="hello.txt" todir="myfile"/>
<move todir="herfile"> <fileset dir="myfile"/></move>
</target>
</project>
copy命令用来对文件和目录的复制功能。
delete 命令对文件或目录进行删除
mkdir 命令创建目录
move 命令移动文件或目录
与Ant相当的工具有Maven,Maven预设了一些方便的功能,而ant只能自己写,各有自己的优势。就像hibernate和IBatis,hibernate做了一定的封装,方便了,却失去了一定的灵活性。
java的世界太大,有许许多多的工具,为了快速进行开发,我们一定要善假于物也,对众多工具先有个了解,知道有这么回事,需要时才知道去找谁,再即用即学也不迟。
借助Ant工具,实现快速开发的更多相关文章
- vulcanjs 开源工具方便快速开发react graphql meteor 应用
vulcan 开源工具方便快速开发react graphql meteor 应用 操作环境mac os 安装 meteor 安装(此安装有点慢,可以通过正确上网解决) curl https://ins ...
- Android开源项目发现--- 工具类快速开发篇(持续更新)
1. Guava Google的基于java1.6的类库集合的扩展项目 包括collections, caching, primitives support, concurrency librarie ...
- Android(java)学习笔记262:JNI之工具快速开发步骤
下面通过一个案例说明一下,利用工具jni快速开发步骤 1.新建一个Android工程,命名为"03_对int数组加1",如下: 2. 在MainActivity.java中对add ...
- Android(java)学习笔记206:JNI之工具快速开发步骤
下面通过一个案例说明一下,利用工具jni快速开发步骤 1.新建一个Android工程,命名为"03_对int数组加1",如下: 2. 在MainActivity.java中对add ...
- oa办公系统快速开发工具,助力企业优化升级
随着互联网的快速发展.信息化 IT 技术的不断进步.移动互联新技术的兴起,不管是大的集团企业还是中小型企业,纸质化的办公模式已不能满足现有需求,构建oa平台,为员工提供高效的办公环境尤其重要. 我们先 ...
- 程序小白如何快速开发OA办公系统
对于企业开发oa办公系统,成本高,周期长.有些企业花高价购买,购买后受制于软件商,很多功能只能按原来设计需求走,无法升级或者升级慢.这些由于软件商的开发效率低难以及时地响应企业的需求变化,所以就有可能 ...
- 开发者不可不知的五款DIY快速开发工具,你造吗
对于非专业的移动开发者,弱化编程能力的快发开发工具实用性够强,无需编程只要借助工具提供的各种功能模块,就能开发出属于自己的应用,而支持DIY更能使应用开发锦上添花,借助快速开发工具开发出属于自己的“能 ...
- 开发者必知的几款App快速开发工具
“我有一个好创意,就差一个CTO……” ,这是今年炒的比较火的一句话. “原生APP开发难度大,周期长,成本高,还没上线市场已经被占领了.这个有没有解决方案?” “APP版本迭代更新,都是企业的一道难 ...
- Web API应用架构在Winform混合框架中的应用(4)--利用代码生成工具快速开发整套应用
前面几篇介绍了Web API的基础信息,以及如何基于混合框架的方式在WInform界面里面整合了Web API的接入方式,虽然我们看似调用过程比较复杂,但是基于整个框架的支持和考虑,我们提供了代码生成 ...
随机推荐
- Uva 12361 File Retrieval 后缀数组+并查集
题意:有F个单词,1 <= F <=60 , 长度<=10^4, 每次可以输入一个字符串,所有包含该字串的单词会形成一个集合. 问最多能形成多少个不同的集合.集合不能为空. 分析:用 ...
- ANDROID_MARS学习笔记_S01原始版_002_实现计算乘积及menu应用
一.代码 1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- 万能脚本助Web执行底层Linux命令
需求分析: 这里先要说明的是,这一篇不是QT系列的文章,而是关于Web的,之所以要写这篇,是因为以前做Web相关开发的时候,经常涉及到与linux底层命令打交道,比如说创建一个目录,删除一个目录,或者 ...
- 弱安全协议探测工具-sslciphercheck
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为 网络通信提供安全及数据完整性的一种安全协议.TLS ...
- dojo自定义Widget
使dojo AMD规范进行widget 定义,开始的时候一直找不到自己定义的widget模块的位置,经过探索,总算有收获,我这个人有毛病,脑子里不允许有一些想不通的问题,一旦有了问题,就非常难受,心里 ...
- WIP Job > APP-WIP-25191 or Pending Close
使用 Close Discrete Jobs (FORM) 关闭工单,有一工单的状态一直为PENDING CLOSE 检查 PENDING MATERIAL TRANSACTION ,PENDING ...
- git push origin master、git pull出现如下错误
git push origin master出现如下错误: Counting objects: , done. Writing objects: % (/), bytes, done. Total ( ...
- Reflector+Reflexil 相结合实现对DLL文件修改
在工作过程中,我们有可能遇到这样的问题:公司发给客户的软件包突然报错了,但是你知道哪里报错了,而这个代码已经编译成DLL文件了,源代码不在自己这里.怎么办呢?还好现在有Reflexil插件,这个插件只 ...
- [转]NHibernate之旅(12):初探延迟加载机制
本节内容 引入 延迟加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过前面文章的分析,我们知道了如何使用NHibernate,比如CRUD操作.事务.一对多.多对多映射等问题,这 ...
- javaweb之javascript结合(三)
1.案例一:在末尾添加节点 第一步:获取到ul标签 第二步:创建li标签 document.createElement("标签名称")方法 第三步:创建文本 document.cr ...