<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    冰浪

    哥已不再年輕 - 堅定夢想,畢生追求!
    posts - 85, comments - 90, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    [原]ANT學習體會

    Posted on 2007-01-23 10:52 冰浪 閱讀(5644) 評論(8)  編輯  收藏 所屬分類: 其它

    這幾天在公司比較閑,所以決定學習ANT的使用,ANT(another neat tool)是一種快速構建工具,主要用于java,類似于C++的make。ANT功能很強大,但很易于使用。

    你們一定很奇怪,既然說它易于使用,為什么我要學幾天??呵呵~主要是學習資料不足和自己比較粗心的緣故。

    下面我就先把我自己寫的build.xml文件拿出來,build.xml文件是作為ANT的buildfile,運行ANT命令時,會默認查找當前目錄下的這個文件。
    <!--build.xml start-->

    <project name="MyProject" default="dist" basedir=".">
    ??? <description>
    ??? simple example build file
    ?</description>
    ?<property name="src" location="src"/>
    ?<property name="build" location="build"/>
    ??? <property name="dist" location="dist"/>
    ?<property name="myclasspath" location="WebRoot\WEB-INF\classes"/>

    ??? <property name="lib.dir" location="E:\setup\java\jakarta-tomcat-5.0.28\common\lib"/>
    ?<property name="mylib.dir" location="WebRoot\WEB-INF\lib"/>

    ??? <path id="libAndClass.path">
    ??? <pathelement location="${build}" />
    ??? <fileset dir="${lib.dir}" >
    ?????? <include name="**/*.jar" />
    ??? </fileset>
    ?????? <fileset dir="${mylib.dir}" >
    ?????? <include name="**/*.jar" />
    ??? </fileset>
    ?</path>

    ?<target name="init">
    ?? <tstamp/>
    ?? <mkdir dir="${build}"/>

    ?? <echo message="-1- >> Create the class files directory successful!" />
    ?? <echo message="[mkdir] Created dir:${build}" />
    ?</target>

    ?<target name="compile" depends="init" description="compile the source">
    ?? <javac srcdir="${src}" destdir="${build}">
    ???? <classpath refid="libAndClass.path" />
    ?? </javac>

    ?? <echo message="-2- >> Compile the java source files to the Build directiory successful!" />
    ?? <echo message="[javac] Compiling all source files to ${build}" />
    ?</target>

    ?<target name="dist" depends="compile">
    ?? <mkdir dir="${dist}/lib"/>
    ?? <jar jarfile="${dist}/lib/WebComm-${DSTAMP}.jar" basedir="${build}"/>

    ?? <echo message="-3- >> Create the the project jar file to the Dist directiory successful!" />
    ????? <echo message="[jar] Building jar: ${build}" />
    ?</target>

    ?<target name="clean">
    ?? <delete dir="${build}"/>
    ?? <delete dir="${dist}"/>
    ?</target>

    ?<target name="copyto">
    ?? <copy todir="${myclasspath}">
    ???? <fileset dir="${build}"/>
    ????? </copy>
    ?</target>

    </project>

    <!--build.xml end-->

    這個build.xml的主要用于編譯*.java文件,主要的target(一項任務)是Compile,因為編譯之后還要將之打包,所以將默認target為dist:

    <project name="MyProject" default="dist" basedir=".">

    =>default="dist"

    basedir=".":指明工作路徑為當前目錄。
    按照依賴關系“depends=targetname”,ANT命令會按init,compile,dist的順序來執行這些target。后面的兩個target:clean,copyto并不會執行,需要在命令行下輸入:ant targetname的形式才會執行,這兩個target的功能是用于刪除class文件的文件夾和將這些class文件拷到WEB-INF\classes下。

    現在主要講講最主要的target:compile,也就是編譯。
    在java源文件中,我們很多時候都需要要導入一些相關包,所以在用javac編譯這些源文件時,需要加上classpath,因此,在用ANT來編譯時我們也需要要指定這些jar文件路徑,以求順利通過編譯。
    我們在前面先定義好我們需要的classpath:

    <path id="libAndClass.path">
    ??? <pathelement location="${build}" />
    ??? <fileset dir="${lib.dir}" >
    ?????? <include name="**/*.jar" />
    ??? </fileset>
    ?????? <fileset dir="${mylib.dir}" >
    ?????? <include name="**/*.jar" />
    ??? </fileset>
    </path>
    ?
    ?id="libAndClass.path"是指定一個id以方便在target里引用。
    ?
    ?<pathelement location="${build}" />:是讓生成的class類文件也作為以后編譯要用到的相關類文件。
    ???
    <fileset dir="${lib.dir}" >
    ? <include name="**/*.jar" />
    </fileset>
    是指定本工程項目的WEB-INF\lib下的jar包。

    <fileset dir="${mylib.dir}" >
    ? <include name="**/*.jar" />
    </fileset>
    指定tomcat下的公共庫。

    完成后就直接在compile的target里引用:
    <javac srcdir="${src}" destdir="${build}">
    ?<classpath refid="libAndClass.path" />
    </javac>

    注意,在這里,引用是用refid=idname方式,不然不能正常工作。我就是因為把refid誤換成localtion,所以一直不能編譯成功。

    以上是我在學習ANT中的一些體會,并不是ANT教程,所以沒有講得很細,但看過ANT的基礎知識后再看我寫的這篇文章,應該就很好理解了,希望對初學者有點幫助。


    評論

    # re: [原]ANT學習體會  回復  更多評論   

    2007-01-23 11:49 by samfree[匿名]
    這幾天也正好用到ant,便琢磨了一下.遇到了一個問題,向摟主請教一下.
    ant的時候,我們需要把cvs下tag文件 copy到jar包里,問題是如果tag文件
    不存在的話,就自動生成一個tag,寫上當前日期.在tag里該怎樣判斷文件的存在呢?

    # re: [原]ANT學習體會  回復  更多評論   

    2007-01-23 12:01 by 冰浪
    @samfree[匿名]

    我不是很明白你要表達的意思,能說清楚點嗎?
    給你一個例子,不知能否幫到你:
    <condition property="abc.efg">
    <and>
    <available file="abc.js" filepath="d:/"/>
    </and>
    </condition>

    <target name="your-task" if="abc.efg">
    <echo>${abc.efg}</echo>
    </target>

    根據d:/abc.js文件是否存在來決定your-task任務的執行與否。

    # re: [原]ANT學習體會  回復  更多評論   

    2007-01-23 14:51 by samfree[匿名]
    多謝冰浪,你給的例子非常好,正是我要用的。
    <condition property="exist.tag">
    <and>
    <available file="Tag" filepath="CVS/"/>
    </and>
    </condition>
    <target name="copy" if="exist.tag">
    <copy file="CVS/Tag" todir="./"/>
    </target>
    <target name="nocopy" unless="exist.tag" depends="copy">
    <java classname="com.ruanying.pub.Tag">
    <classpath>
    <pathelement location="${build}"/>
    </classpath>
    </java>
    </target>
    如果cvs/tag存在,就把它copy到當前目錄下。如果不存在就創建一個tag文件
    ,并把當前日期寫入。我不知道用ant怎么往文件里寫東西,所以就調用了一個
    類來寫東西。不知你有什么別的方法嗎?

    # re: [原]ANT學習體會  回復  更多評論   

    2007-01-23 15:31 by 冰浪
    @samfree[匿名]

    ANT在文件系統操作中有一替換文件的標記:
    <replace file="input.txt" token="old" value="new"/>
    它執行文件中的查找和替換操作。token 屬性指定要查找的字符串,value 屬性指定一個新的字符串,查找到的標記字符串的所有實例都被替換為這個新的字符串。

    按你的要求,把token屬性指定為“”,就是空字符串,然后value屬性指定為你要寫入的當前日期,不知這樣是否可以實現?

    # re: [原]ANT學習體會  回復  更多評論   

    2007-01-23 23:27 by 小車馬
    ant非常的簡潔,一直用它,呵呵

    樓主,潛力貼論壇(http://content.uu1001.com)是我個人的一個設想,如果你對java非常的專注,并且愿意交我這個朋友,可以發郵件給我(lbw070105@gmail.com),希望我們可以一起發展它。

    # re: [原]ANT學習體會  回復  更多評論   

    2007-01-24 10:47 by samfree[匿名]
    謝謝冰浪,問題已經解決了.

    # re: [原]ANT學習體會  回復  更多評論   

    2007-02-28 15:51 by chin
    感謝冰浪的例子,不過我想判斷一個目錄是否存在,不知道該怎么做。望指教。

    # re: [原]ANT學習體會  回復  更多評論   

    2008-01-19 11:05 by wanlu
    請教一個問題,我想用ant寫一個判斷語句,判斷是否存在某一個目錄,若存在則執行target A , 若不存在則執行target B ,幫我看一下我寫的是不是對的?

    <project name="test" default="testB" basedir=".">
    <property name="desturl" value="build/2008/01"/>
    <condition property="folderexist">
    <and>
    <available file="${desturl}" type="dir"/>
    </and>
    </condition>
    <target name="testA" if="folderexist">
    <echo message="the folder was exist!"/>
    </target>
    <target name="testB" unless="folderexist" depends="testA">
    <echo message="the folder was not exist"/>
    </target>
    </project>


    主站蜘蛛池模板: 日韩免费无码一区二区三区 | 中文字幕永久免费视频| 欧亚精品一区三区免费| 亚洲视频免费播放| 国产福利视精品永久免费| 亚洲人妖女同在线播放| 大学生一级毛片免费看| 国产日韩精品无码区免费专区国产| 又黄又爽一线毛片免费观看| 黄色a级免费网站| 在线观看亚洲精品国产| A片在线免费观看| 亚洲综合精品一二三区在线| 亚洲免费视频网站| 99999久久久久久亚洲| 成人免费视频软件网站| 国产亚洲福利一区二区免费看| 亚洲国产精品国产自在在线| www成人免费观看网站| 久久亚洲国产欧洲精品一| 99爱在线精品视频免费观看9| 亚洲系列中文字幕| 好男人视频社区精品免费| 特级毛片A级毛片100免费播放| 亚洲精品成人在线| 久久免费精彩视频| 亚洲精品无码专区| 亚洲中文字幕第一页在线| 免费A级毛片无码视频| 亚洲精品无码成人片久久不卡 | 国产成人亚洲精品影院| 成人片黄网站色大片免费观看APP| 亚洲视频在线一区二区三区| 国产猛烈高潮尖叫视频免费| 国产免费伦精品一区二区三区| 精品日韩亚洲AV无码一区二区三区 | 亚洲自偷精品视频自拍| 国内自产拍自a免费毛片| 国产成人无码免费网站| 中文字幕亚洲综合久久| 国产精品四虎在线观看免费|