`
renjie120
  • 浏览: 234934 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D11bba82-ec4a-3d31-a3c0-c51130c62f1c
Java应用集锦
浏览量:22459
社区版块
存档分类
最新评论

ANT学习心得【第一部分】

    博客分类:
  • ant
阅读更多

 

 

两周发一篇技术贴,总结一下这两周学习的成果。这是第二贴。

 

最近开始学习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>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics