冰浪

          哥已不再年輕 - 堅(jiān)定夢(mèng)想,畢生追求!
          posts - 85, comments - 90, trackbacks - 0, articles - 3
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          [原]ANT學(xué)習(xí)體會(huì)

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

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

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

          下面我就先把我自己寫的build.xml文件拿出來,build.xml文件是作為ANT的buildfile,運(yùn)行ANT命令時(shí),會(huì)默認(rèn)查找當(dāng)前目錄下的這個(gè)文件。
          <!--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-->

          這個(gè)build.xml的主要用于編譯*.java文件,主要的target(一項(xiàng)任務(wù))是Compile,因?yàn)榫幾g之后還要將之打包,所以將默認(rèn)target為dist:

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

          =>default="dist"

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

          現(xiàn)在主要講講最主要的target:compile,也就是編譯。
          在java源文件中,我們很多時(shí)候都需要要導(dǎo)入一些相關(guān)包,所以在用javac編譯這些源文件時(shí),需要加上classpath,因此,在用ANT來編譯時(shí)我們也需要要指定這些jar文件路徑,以求順利通過編譯。
          我們?cè)谇懊嫦榷x好我們需要的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"是指定一個(gè)id以方便在target里引用。
          ?
          ?<pathelement location="${build}" />:是讓生成的class類文件也作為以后編譯要用到的相關(guān)類文件。
          ???
          <fileset dir="${lib.dir}" >
          ? <include name="**/*.jar" />
          </fileset>
          是指定本工程項(xiàng)目的WEB-INF\lib下的jar包。

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

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

          注意,在這里,引用是用refid=idname方式,不然不能正常工作。我就是因?yàn)榘裷efid誤換成localtion,所以一直不能編譯成功。

          以上是我在學(xué)習(xí)ANT中的一些體會(huì),并不是ANT教程,所以沒有講得很細(xì),但看過ANT的基礎(chǔ)知識(shí)后再看我寫的這篇文章,應(yīng)該就很好理解了,希望對(duì)初學(xué)者有點(diǎn)幫助。


          評(píng)論

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

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

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

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

          我不是很明白你要表達(dá)的意思,能說清楚點(diǎn)嗎?
          給你一個(gè)例子,不知能否幫到你:
          <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>

          根據(jù)d:/abc.js文件是否存在來決定your-task任務(wù)的執(zhí)行與否。

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

          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存在,就把它c(diǎn)opy到當(dāng)前目錄下。如果不存在就創(chuàng)建一個(gè)tag文件
          ,并把當(dāng)前日期寫入。我不知道用ant怎么往文件里寫東西,所以就調(diào)用了一個(gè)
          類來寫東西。不知你有什么別的方法嗎?

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

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

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

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

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

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

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

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

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

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

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

          # re: [原]ANT學(xué)習(xí)體會(huì)  回復(fù)  更多評(píng)論   

          2008-01-19 11:05 by wanlu
          請(qǐng)教一個(gè)問題,我想用ant寫一個(gè)判斷語(yǔ)句,判斷是否存在某一個(gè)目錄,若存在則執(zhí)行target A , 若不存在則執(zhí)行target B ,幫我看一下我寫的是不是對(duì)的?

          <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>



          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 盐山县| 辛集市| 通榆县| 乳源| 乌海市| 宜君县| 临清市| 拜泉县| 留坝县| 平山县| 龙南县| 建水县| 平湖市| 龙口市| 宜兰县| 湘西| 逊克县| 盖州市| 兴国县| 页游| 昌平区| 宁波市| 盱眙县| 洪泽县| 潼关县| 靖边县| 海南省| 耒阳市| 宿迁市| 东方市| 安国市| 广汉市| 肃宁县| 公主岭市| 龙南县| 丁青县| 龙胜| 清河县| 湖口县| 仁怀市| 布尔津县|