MDA之路

          MDA,UML,XML,Eclipse及Java相關(guān)的Blog
          posts - 53, comments - 494, trackbacks - 0, articles - 2
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Ant-最終還是要學(xué)的一門手藝

          Posted on 2005-05-18 21:45 wxb_nudt 閱讀(1941) 評(píng)論(6)  編輯  收藏 所屬分類: 技術(shù)雜談

          Ant-最終還是要學(xué)的一門手藝

          最初注意到Ant是在ArcStyler這個(gè)著名的MDA工具之中,既然是MDA工具,當(dāng)然要具備很多“自動(dòng)”的功能。自動(dòng)的從流程圖到代碼的生成,自動(dòng)的代碼編譯和配置功能,自動(dòng)的臨時(shí)目錄清理功能。而這些自動(dòng)的功能中,很多來(lái)自于一個(gè)小小的“爬蟲(chóng)”一樣的圖標(biāo)。這就是我后來(lái)意識(shí)到鼎鼎大名的Ant了。

          現(xiàn)在當(dāng)然知道了,從最著名商務(wù)軟件開(kāi)發(fā)環(huán)境JBuilder到最著名的開(kāi)源IDE集成平臺(tái)Eclipse上,都爬上了這只小螞蟻的身影。而Apache組織里面幾乎所有的開(kāi)源項(xiàng)目,都是用Ant進(jìn)行編譯配置的。這很容易理解,Ant本身就是Apache的頂級(jí)開(kāi)源項(xiàng)目之一。也可以說(shuō)是使用得最為廣泛的項(xiàng)目之一。

          Ant的意思是“Another Neat Tool”,就是“另一個(gè)整潔的工具”。那么,第一個(gè)整潔的工具是什么呢?我想應(yīng)該是make。在IDE大行其道下成長(zhǎng)起來(lái)的程序員,也許對(duì)Antmake都不太熟悉,但是再前一點(diǎn)的人們,相信都有過(guò)在機(jī)房摸著腦袋寫makefile的經(jīng)歷了。也許你們看到這句“摸著腦袋”的話,嘴角已經(jīng)露出了會(huì)心的微笑了。用make編譯項(xiàng)目最繁瑣的莫過(guò)于在不同的平臺(tái)下面要寫不同的makefile,即使可以寫在一個(gè)makefile中,也是把真正的內(nèi)容淹沒(méi)在一大堆的編譯開(kāi)關(guān)里面。那時(shí)候,沒(méi)有想到一個(gè)真正可以跨平臺(tái)的編譯配置工具這么快就可以出現(xiàn)了,那就是2000年出生的Ant

          本科的時(shí)候,最佩服一個(gè)師兄。他幾乎從來(lái)不用什么開(kāi)發(fā)環(huán)境和可視化的工具,搞什么事情都是make installmake cleanmake –f makefile.mak,當(dāng)然還有telnetftp等等,命令行記得純熟無(wú)比,不管是在windows還是linux下面。寫程序的時(shí)候當(dāng)然更是如此,一堆一堆的目錄,源程序,通通一個(gè)都是一個(gè)make來(lái)管理。用VC的時(shí)候是nmake,用gcc的時(shí)候就是make。現(xiàn)在想起來(lái),他就是把一個(gè)make用得滾瓜爛熟了,不想再用其他東西而已。

          很早就明白了,離開(kāi)IDE就不會(huì)編譯程序的程序員,永遠(yuǎn)不可能成為真正的程序員。但是一直以來(lái),不想好好學(xué)習(xí)make或者ant,每次事到臨頭都是匆匆修改別人的makefile或者build.xml,抱抱佛腳,里面的內(nèi)容也是似是而非,似懂非懂。但是,我覺(jué)得Ant還是最終要學(xué)的一門手藝,特別是對(duì)于一個(gè)java程序員。

          今天終于下定決心,要認(rèn)真看看Ant,事情的起因是因?yàn)?/SPAN>hibernate的學(xué)習(xí)過(guò)程中,看到一個(gè)例子程序使用了Ant,不甚了了,所以下了決心。運(yùn)氣特別好的是,Ant有一個(gè)非常好的入門教程http://www.javafan.net/softview.jsp?ID=206。用了一個(gè)上午加上一個(gè)下午的時(shí)間,基本上已經(jīng)掌握了Ant最基本的內(nèi)容,對(duì)于大多數(shù)人來(lái)說(shuō),已經(jīng)足夠了。當(dāng)然,要得益于自己對(duì)xmlmakeEclipse等等相關(guān)內(nèi)容都比較熟悉。

          詳細(xì)寫學(xué)習(xí)Ant的安裝、配置和學(xué)習(xí)過(guò)程沒(méi)什么意思。把自己的一個(gè)小練習(xí)列在下面,就是一個(gè)上午和一個(gè)下午的學(xué)習(xí)結(jié)果:

          Java項(xiàng)目HelloAnt,根目錄名稱就是HelloAnt,根目錄包含build.xmlsub.xml

          項(xiàng)目包含一個(gè)src子目錄,src中包含一個(gè)源文件HelloAnt.java

          文件內(nèi)容如下:

          HelloAnt

          public class HelloAnt {

           

                 public static void main(String[] args) {

                        System.out.println("Hello Ant!");

                 }

          }

           

          build.xml

          <?xml version="1.0"?>

          <project default="jar" name="Project HelloAnt">

              <description>

           

          </description>

              <property name="base.dir" value="."/>

              <property name="src.dir" value="src"/>

              <property name="build.dir" value="classes"/>

              <property name="dist.dir" value="dist"/>

              <property name="user.name" value="Wxb_nudt"/>

              <path id="myclasspath">

                  <pathelement location="${build.dir}"/>

              </path>

           

              <target name="init" description="初始化編譯工作">

                  <mkdir dir="${build.dir}"/>

                  <mkdir dir="${dist.dir}"/>

                  <tstamp/>

              </target>

           

              <target name="build" depends="init" description="編譯源文件">

                  <javac srcdir="${src.dir}" destdir="${build.dir}"/>

                  <copy todir="${build.dir}">

                      <fileset dir="${src.dir}">

                          <exclude name="**/*.java"/>

                      </fileset>

                  </copy>

              </target>

             

              <target name="jar" depends="build" description="打包c(diǎn)lass文件和源代碼">

                  <jar destfile="${dist.dir}/HelloAnt-${DSTAMP}.jar" basedir="${build.dir}">

                  <manifest>

                  <attribute name="Built-By" value="${user.name}"/>

                  </manifest>

                  </jar>

                  <jar destfile="${dist.dir}/HelloAnt-src-${DSTAMP}.jar" basedir="${src.dir}"/>      

              </target>

             

              <target name="run" depends="build" description="運(yùn)行HelloAnt的main函數(shù)">

                  <java classpathref="myclasspath" classname="HelloAnt" fork="true"/>

              </target>

           

              <target name="clean" description="清除編譯過(guò)程中創(chuàng)建的目錄">

                  <delete dir="${build.dir}"/>

                  <delete dir="${dist.dir}"/>

              </target>

             

              <target name="copy" description="將源文件夾中的java文件拷貝到build文件夾">

                  <copy todir="${build.dir}">

                      <fileset dir="${src.dir}">

                          <include name="*.java"/>

                      </fileset>

                  </copy>

                  <echo message="copy file finished!"/>

              </target>

             

              <target name="CallSub" description="調(diào)用另一個(gè)sub.xml文件中的目標(biāo)">

                  <ant antfile="sub.xml" target="showMessage" inheritAll="false">

                      <property name="message" value="Hello from parent build"/>

                  </ant>

              </target>

           

          </project>

           

          sub.xml

          <?xml version="1.0"?>

          <project default="showMessage">

          <target name="showMessage">

          <echo message="Message=${message}"/>

          </target>

          </project>

           

          運(yùn)行結(jié)果如下:

          輸入ant

          Buildfile: D:\eclipse301\workspace\HelloAnt\build.xml

          init:

              [mkdir] Created dir: D:\eclipse301\workspace\HelloAnt\classes

              [mkdir] Created dir: D:\eclipse301\workspace\HelloAnt\dist

          build:

              [javac] Compiling 1 source file to D:\eclipse301\workspace\HelloAnt\classes

          jar:

                [jar] Building jar: D:\eclipse301\workspace\HelloAnt\dist\HelloAnt-20050518.jar

                [jar] Building jar: D:\eclipse301\workspace\HelloAnt\dist\HelloAnt-src-20050518.jar

          BUILD SUCCESSFUL

          Total time: 3 seconds

          輸入ant run

          Buildfile: D:\eclipse301\workspace\HelloAnt\build.xml

          init:

          build:

          run:

               [java] Hello Ant!

          BUILD SUCCESSFUL

          Total time: 2 seconds

          輸入ant copy

          Buildfile: D:\eclipse301\workspace\HelloAnt\build.xml

          copy:

               [copy] Copying 1 file to D:\eclipse301\workspace\HelloAnt\classes

               [echo] copy file finished!

          BUILD SUCCESSFUL

          Total time: 1 second

          輸入ant CallSub

          Buildfile: D:\eclipse301\workspace\HelloAnt\build.xml

          CallSub:

          showMessage:

               [echo] Message=Hello from parent build

          BUILD SUCCESSFUL

          Total time: 922 milliseconds

          輸入ant clean

          Buildfile: D:\eclipse301\workspace\HelloAnt\build.xml

          clean:

             [delete] Deleting directory D:\eclipse301\workspace\HelloAnt\classes

             [delete] Deleting directory D:\eclipse301\workspace\HelloAnt\dist

          BUILD SUCCESSFUL

          Total time: 985 milliseconds

          其中Ant版本1.5JDK版本J2sdk1.4.2Eclipse3.0.1(這個(gè)無(wú)關(guān)緊要,我在Eclipse中和在控制臺(tái)運(yùn)行沒(méi)有絲毫區(qū)別)。

          今日心情甚好,結(jié)繩以記之!


          評(píng)論

          # re: Ant-最終還是要學(xué)的一門手藝  回復(fù)  更多評(píng)論   

          2005-05-18 22:11 by base
          ^_^8錯(cuò)8錯(cuò),學(xué)而時(shí)習(xí)之,不亦樂(lè)乎

          # re: Ant-最終還是要學(xué)的一門手藝  回復(fù)  更多評(píng)論   

          2005-05-19 19:58 by 柳青青
          看了你的隨筆后,發(fā)現(xiàn)你真的很厲害呀!
          你能做我的偶像嗎?:)

          我的論文真的很難動(dòng)手,如果你同意的話,我想把我的開(kāi)題報(bào)告發(fā)給你看看,讓你給我提點(diǎn)好的建議,重要的是如何完成這個(gè)項(xiàng)目.

          # re: Ant-最終還是要學(xué)的一門手藝  回復(fù)  更多評(píng)論   

          2005-05-21 10:01 by 月光亂亂
          雖然不是個(gè)美女 不過(guò)也不行!
          你只可以和男的做學(xué)術(shù)交流!!!女的一律免談!!!

          # re: Ant-最終還是要學(xué)的一門手藝  回復(fù)  更多評(píng)論   

          2005-05-21 10:02 by 月光亂亂
          雖然不是個(gè)美女 不過(guò)也不行!
          你只可以和man做學(xué)術(shù)交流!!!woman一律免談!!!

          # re: Ant-最終還是要學(xué)的一門手藝  回復(fù)  更多評(píng)論   

          2005-07-08 15:29 by 雨雪霏霏
          Buildfile: D:\eclipse\workspace\HelloAnt\build.xml
          CallSub:
          showMessage:
          [echo] Message=Hello from parent build
          BUILD SUCCESSFUL
          Total time: 406 milliseconds

          我用最新的Eclipse運(yùn)行速度好像塊多了

          ps:月光亂亂管得好嚴(yán)呀

          # re: Ant-最終還是要學(xué)的一門手藝  回復(fù)  更多評(píng)論   

          2005-07-08 15:37 by 雨雪霏霏
          好像是我的硬件比較好,bs我自己

          我用Eclipse3.0.2 J2se5.0

          Buildfile: D:\eclipse\workspace\HelloAnt\build.xml
          clean:
          [delete] Deleting directory D:\eclipse\workspace\HelloAnt\classes
          [delete] Deleting directory D:\eclipse\workspace\HelloAnt\dist
          BUILD SUCCESSFUL
          Total time: 406 milliseconds
          主站蜘蛛池模板: 太谷县| 同心县| 凤阳县| 乌兰浩特市| 渭南市| 沙坪坝区| 祁连县| 乐业县| 忻州市| 秦皇岛市| 留坝县| 红安县| 涿鹿县| 柳江县| 横山县| 延吉市| 兰考县| 岑巩县| 新绛县| 延津县| 炎陵县| 江川县| 垫江县| 滨州市| 济宁市| 诏安县| 鄂托克前旗| 仙桃市| 双桥区| 龙岩市| 万全县| 昌黎县| 静宁县| 玉田县| 阿坝县| 舒城县| 房山区| 蓬莱市| 榆中县| 浙江省| 翼城县|