两周发一篇技术贴,总结一下这两周学习的成果。这是第二贴。
最近开始学习ant部署的教程,了解了一点点皮毛,做了一些总结。
先发第一部分,附件是相关的联系的源码文件。
第二部分再总结一下ant如何和tomcat结合部署一个web工程,如何和junit结合进行单元测试。
我是ant初学者,欢迎高手指点...
一 . 环境变量配置
下载地址: http://ant.apache.org/bindownload.cgi
下载之后,配置 ANT_HOME (E:\ 火狐下载 \apache-ant-1.8.2-bin\apache-ant-1.8.2)
添加 PATH %ANT_HOME%\bin;
为了方便测试,还添加了 junit jar 包到 ant 的下面的 lib 下面。
修改环境变量 class_path :添加 %ANT_HOME%\lib\junit-4.9b2.jar;
测试安装 ant 是否成功,在 cmd 下面输入命令: ant 出现:
build failed 等字样,就说明成功了。因为缺少build.xml
就可以了。
二 ANT 基础使用
2.1HelloWorld
2.1 建立一个 src 文件夹,放一个简单的 HelloWorld.java
package test; public class HelloWorld { public static void main(String[] a){ System.out.println(" 你好的啊 "); } } |
2.2 在 src 目录同级写一个 build.xml:
<?xml version="1.0" encoding="UTF-8"?> <!-- 编译的名字 --> <project name="HelloWorld" default="run" basedir="."> <!-- 下面定义了三个变量,后面将引用。 --> <property name="src" value="src"/> <property name="dest" value="classes"/> <property name="hello_jar" value="hello1.jar"/> <!-- init 步骤 : 创建一个 dest 目录 --> <target name="init"> <mkdir dir="${dest}"/> </target>
<!-- 编译 --> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}"/> </target>
<!-- 生成 jar --> <target name="build" depends="compile"> <jar jarfile="${hello_jar}" basedir="${dest}"/> </target>
<!-- 运行 --> <target name="run" depends="build"> <java classname="test.HelloWorld" classpath="${hello_jar}"/> </target>
<!-- 清空 --> <target name="clean"> <delete dir="${dest}"/> <delete file="${hello_jar}"/> </target>
<!-- 重新编译执行 --> <target name="rerun" depends="clean,run"> <ant target="clean"/> <ant target="run"/> </target> </project>
|
注意:下面的 name 里面的值都可以自定义!!
target 就是表示 ant 可以执行的操作名称!!
在第一行配置文件里面, default="run" 表示默认执行就是 target=run 的操作。即,如果只输入 ant ,实际效果等于 ant run
三 引用 properties 属性
可以在 properties 文件中定义属性内容,然后用一个公用的 xml ,去调用这些属性文件的值就可以了,只需要改写属性内容的值。
定义一个属性文件: all.properties ,内容如下,每个 src 文件夹里面都含有 build.xml 以及 java 所在的源码文件夹
src1=D:\\ant test\\2build_some_srcs\\src1 src2=D:\\ant test\\2build_some_srcs\\src2 src3=D:\\ant test\\2build_some_srcs\\src3 |
然后在同级定义一个 build.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="main" default="build" basedir="."> <property file="all.properties"/> <property name="bin" value="${basedir}\bin"/> <target name="init"> <mkdir dir="${bin}"/> </target>
<!-- 在 build 的时候,把各个子文件夹里面的 jar 都拷贝到 bin 里面去! --> <target name="build" depends="init,subuild"> <copy todir="${bin}"> <fileset dir="${src1}"> <!-- 这里可以添加多种文件的类型。如果几个不同的 src 目录里面有同名的文件,后面的就覆盖了 --> <include name="*.jar"/> <include name="*.xml"/> </fileset> <fileset dir="${src2}"> <include name="*.jar"/> </fileset> <fileset dir="${src3}"> <include name="*.jar"/> </fileset> </copy> </target>
<target name="subuild" > <ant dir="${src1}" target="build"/> <ant dir="${src2}" target="build"/> <ant dir="${src3}" target="build"/> </target>
<!-- 下面通过递归调用了各个 src 里面的 ant run 命令! --> <target name="run" > <ant dir="${src1}" target="run"/> <ant dir="${src2}" target="run"/> <ant dir="${src3}" target="run"/> </target>
<target name="clean"> <ant dir="${src1}" target="clean"/> <ant dir="${src2}" target="clean"/> <ant dir="${src3}" target="clean"/> </target>
<target name="rebuild" depends="build,clean"> <ant target="clean"/> <ant target="build"/> </target> </project> |
四 include 配置文件
可以把一些公用的配置放到一个 xml 中,其他分的配置文件在引用这个文件
定义一个 include.xml:
<!-- 定义了一些属性,以及还有一个动作叫做 test ,实际是调用的 run --> <?xml version="1.0" encoding="UTF-8"?> <property name="src" value="src"/> <property name="dest" value="classes"/> <target name="test"> <ant target="run"/> </target>
然后在要引用上面配置文件的主文件中: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE project[ <!ENTITY share-variable SYSTEM "file:../include.xml"> ]> <project name="HelloWorld" default="run" basedir="."> &share-variable; <!-- 这里的东西不要忘记了! --> <property name="hello_jar" value="hello1.jar"/> <target name="init"> <mkdir dir="${dest}"/> </target> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}"/> </target>
<target name="build" depends="compile"> <jar jarfile="${hello_jar}" basedir="${dest}"/> </target>
<target name="run" depends="build"> <java classname="test.HelloWorld1" classpath="${hello_jar}"/> </target> </project> |
然后可以使用 ant test 进行执行了(调用的 run 方法)
五 生成 jar 包
<?xml version="1.0" encoding="GBK"?> <project name="HelloWorld" default="run" basedir="."> <property file="all.properties"/> <!-- 引用一个属性文件 --> <target name="clean"> <delete dir="${build.jar}"/> </target>
<!-- 将源文件编译之后的 class 文件放到 classes.dir 下面 --> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src}" destdir="${classes.dir}"/> </target>
<!-- 将 class 打 jar 包,并制定执行的主文件是 main-class, 然后把 jar 包 放到 jar.dir 里面 , 命名为 myfirst.jar--> <target name="jar" depends="compile"> <mkdir dir="${jar.dir}"/> <jar destfile="${jar.dir}/myfirst.jar" basedir="${classes.dir}"> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target>
<!-- 执行生成的 jar 包,注意下面的 fork 属性为 true 表示引用非 java_Home 指定 位置的 jar 包 --> <target name="run" depends="jar"> <java jar="${jar.dir}/myfirst.jar" fork="true"/> </target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/> </project> |
六 调用其他 jar 包
经常需要在代码中引用其他的 jar 包,例如常用的 log4j 等。
<?xml version="1.0" encoding="GBK"?> <project name="HelloWorld" default="run" basedir="."> <property file="all.properties"/> <target name="clean"> <delete dir="${build.jar}"/> </target>
<!-- 表示引入的路径里面的全部的 jar 包 --> <path id="classpath"> <fileset dir="${lib.dir}" includes="**/*.jar"/> </path>
<!-- 将源文件编译之后的 class 文件放到 classes.dir 下面 同时引用了 classpath 里面包含的 jar 文件 --> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src}" destdir="${classes.dir}" classpathref="classpath"/> </target>
<target name="jar" depends="compile"> <mkdir dir="${jar.dir}"/> <jar destfile="${jar.dir}/myfirst.jar" basedir="${classes.dir}"> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target>
<!-- 执行生成的 jar 包,注意下面的 fork 属性为 true 表示引用非 java_Home 指定 位置的 jar 包 --> <target name="run" depends="jar"> <java classname="${main-class}" fork="true"> <classpath> <path refid="classpath"/> <path location="${jar.dir}/myfirst.jar"/> </classpath> </java> </target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/> <!-- <path id="classpath"> <fileset dir="lib" includes="**/*.jar"/> </path>
<target name="run" depends="jar"> <java fork="true" classname=""> <classpath> <path refid="classpath"/> <path location="${jar.dir}/apache-ant.jar" /> </classpath> </java> </target> --> </project> |
七 连接数据库
可以通过 ant 直接连接数据库,进行数据库的操作。
<!-- 直接使用命令 ant testsql 就可以对数据库进行操作了! -->
<!-- 将访问数据库的驱动放到 ant 目录下面,为什么不像上面的 F 里面说的配置 classpath 呢?
我认为是因为那个 F 是在代码里面调用了这个 jar 包,而这里是直接在 ant 里面调用的 sql 驱动,直接就连数据库了!! . -->
<target name="testsql"> <sql driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/lsqgbk2" userid="root" password="admin"> insert into china_area values(11,22,33) </sql> </target> |
八 更多的 ant task
或者叫做 core task
<!-- 拷贝目录下面的指定文件类型,排除另外的一些类型 -->
<target name="copy2" depends="clean,init">
<copydir src="${src2}" dest="${dest}" includes="*.doc" excludes="*.pdf"/>
</target>