冰浪

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

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

          Posted on 2007-01-23 10:52 冰浪 閱讀(5647) 評論(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í),會默認(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命令會按init,compile,dist的順序來執(zhí)行這些target。后面的兩個(gè)target:clean,copyto并不會執(zhí)行,需要在命令行下輸入:ant targetname的形式才會執(zhí)行,這兩個(gè)target的功能是用于刪除class文件的文件夾和將這些class文件拷到WEB-INF\classes下。

          現(xiàn)在主要講講最主要的target:compile,也就是編譯。
          在java源文件中,我們很多時(shí)候都需要要導(dǎo)入一些相關(guān)包,所以在用javac編譯這些源文件時(shí),需要加上classpath,因此,在用ANT來編譯時(shí)我們也需要要指定這些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"是指定一個(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下的公共庫。

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

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

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


          評論

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

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

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

          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í)體會  回復(fù)  更多評論   

          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í)體會  回復(fù)  更多評論   

          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í)體會  回復(fù)  更多評論   

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

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

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

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

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

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

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

          2008-01-19 11:05 by wanlu
          請教一個(gè)問題,我想用ant寫一個(gè)判斷語句,判斷是否存在某一個(gè)目錄,若存在則執(zhí)行target A , 若不存在則執(zhí)行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>


          主站蜘蛛池模板: 谷城县| 肇州县| 田阳县| 井研县| 四会市| 贵德县| 香港 | 衢州市| 平原县| 宣恩县| 庄浪县| 岳阳县| 廉江市| 平潭县| 霍林郭勒市| 柳河县| 沾益县| 高青县| 东乌珠穆沁旗| 华阴市| 安吉县| 唐山市| 西峡县| 视频| 新余市| 小金县| 青海省| 灵川县| 沾益县| 乐都县| 治多县| 滦南县| 库车县| 葫芦岛市| 寿宁县| 九江县| 铁力市| 保德县| 长白| 屯昌县| 茌平县|