[转]ç¨Antå®ç°Java项ç®çèªå¨æå»ºåé¨ç½²
åæå°åï¼http://tech.it168.com/j/2007-11-09/200711091344781.shtml
Antæ¯ä¸ä¸ªApacheåºéä¼ä¸ç跨平å°çæä»¶å·¥å ·ï¼å®å¯ä»¥å®ç°é¡¹ç®çèªå¨æå»ºåé¨ç½²çåè½ã卿¬æä¸ï¼ä¸»è¦è®©è¯»è çæææ ·å°Antåºç¨å°Java项ç®ä¸ï¼è®©å®ç®åæå»ºåé¨ç½²æä½ã
ä¸ï¼ å®è£ ä¸é ç½®
ä¸è½½å°åï¼http://ant.apache.org/ï¼å¨æ¬æä¸ä¸è½½çæ¯1.7.0çæ¬ãè§£åå°æä¸ªç®å½ï¼ä¾å¦E:"apache-ant-1.7.0ï¼ï¼å³å¯ä½¿ç¨ã
æ·»å ç³»ç»ç¯å¢åéï¼ANT_HOMEï¼è¯¥åéæåAntè§£ååçæ ¹ç®å½ï¼å¨æ¤ä¸ºE:"apache-ant-1.7.0ã
å®è£
ä¸é
ç½®å®æ¯åï¼è¯»è
å¯ä»¥æµè¯ä¸ä¸Antæ¯å¦å¯ç¨ï¼é¦å
è¿å
¥Antçbinç®å½ï¼è¿è¡å½ä»¤ant âversionï¼è¥å®è£
åé
ç½®æåï¼å伿¾ç¤ºAntçæ¬ä¿¡æ¯ï¼å¦ä¸å¾æç¤ºï¼
ç±ä¸å¯ä»¥çåºï¼è¯»è è¿è¡Antçå½ä»¤æ¶ï¼éè¦è¿å ¥å°Antçbinç®å½ï¼å¦ä½æè½è®©ç³»ç»èªå¨æ¾å°Antå¢ï¼è¿æ¶éè¦è¯»è å¨ç³»ç»ç¯å¢åépath䏿·»å Antçbinç®å½ãè®¾ç½®å®æåï¼æä»¬å°±å¯ä»¥å¨ä»»ä½ç®å½ï¼ä¾å¦C:"Documents and Settings"AmigoXieç®å½ï¼è¾å ¥Antçå½ä»¤ï¼æ¥è·å¾å½ä»¤çè¿è¡ç»æã
äºï¼ Antçå ³é®å ç´
Antçæä»¶æä»¶æ¯åºäºXMLç¼åçï¼é»è®¤å称为build.xmlãä¸ºäºæ´æ¸
æ¥çäºè§£Antï¼å¨è¿éç¼åä¸ä¸ªç®åçAntç¨åºï¼ç¨æ¥å±ç°Antçåè½ï¼è®©è¯»è
对Antæä¸ä¸ªåæ¥çäºè§£ãé¦å
å¨Eçä¸å»ºç«ä¸ä¸ªbuild.xmlæä»¶ï¼å
容å¦ä¸ï¼
读è
å¯ä»¥è¿å
¥Eçï¼ç¶åè¿è¡ant sayHelloWorldï¼å¯ä»¥çå°å¦ä¸çè¿è¡ç»æï¼
å ¶ä¸sayHelloWorld为éè¦æ§è¡çä»»å¡çåç§°ã妿æä»¶åä¸ä¸ºbuild.xmlï¼è为hello.xmlæ¶ï¼è¯»è è¿è¡åæ ·çå½ä»¤æ¶ï¼å½ä»¤çªå£ä¼åºç°å¦ä¸é误ï¼
Buildfile: build.xml does not exist!
Build failed
ç±ä¸é¢çå½ä»¤çé误æç¤ºå¯ä»¥çåºï¼antå½ä»¤é»è®¤å¯»æ¾build.xmlæä»¶ãè¥æä»¶å为hello.xmlæ¶ï¼è¯»è è¿éè¦å¯¹å½ä»¤åå°è®¸æ¹åï¼æ¹ä¸ºï¼ant âf hello.xml sayHelloWorldãant âbuildfile hello.xml sayHelloWorldæant âfile hello.xml sayHelloWorldã
æ¥ä¸æ¥å¼å§å读è 讲解æ¬èçéç¹ï¼Antçå ³é®å ç´ projectãtargetãpropertyåtaskã
1. projectå ç´
projectå ç´ æ¯Antæä»¶æä»¶çæ ¹å ç´ ï¼Antæä»¶æä»¶è³å°åºè¯¥å å«ä¸ä¸ªprojectå ç´ ï¼å¦åä¼åçé误ã卿¯ä¸ªprojectå ç´ ä¸ï¼å¯å å«å¤ä¸ªtargetå ç´ ãæ¥ä¸æ¥å读è å±ç¤ºä¸ä¸projectå ç´ çå屿§ã
1ï¼name屿§
ç¨äºæå®projectå ç´ çåç§°ã
2ï¼default屿§
ç¨äºæå®projecté»è®¤æ§è¡æ¶ææ§è¡çtargetçåç§°ã
3ï¼basedir屿§
ç¨äºæå®åºè·¯å¾çä½ç½®ãè¯¥å±æ§æ²¡ææå®æ¶ï¼ä½¿ç¨Antçæä»¶æä»¶çéç®å½ä½ä¸ºåºåç®å½ã
ä¸é¢ç»è¯»è ä¸ä¸ªç®åçä¾åæ¥å±ç¤ºprojectçåå ç´ ç使ç¨ãä¿®æ¹E:"build.xmlæä»¶ï¼ä¿®æ¹åçå 容å¦ä¸ï¼
ä»ä¸é¢çå
容æä»¬å¯ä»¥çåºï¼å¨è¿éå®ä¹äºdefault屿§çå¼ä¸ºsayBaseDirï¼å³å½è¿è¡antå½ä»¤æ¶ï¼è¥æªæææ§è¡çtargetæ¶ï¼é»è®¤æ§è¡çtargetçsayBaseDirï¼åæ¶è¿å®ä¹äºbasedir屿§çå¼ä¸ºE:"apache-ant-1.7.0ï¼è¿å
¥Eçåè¿è¡antå½ä»¤ï¼å¯çå°è¿è¡çç»æï¼å¦ä¸å¾æç¤ºï¼
å 为设å®äºbasedirçå¼ï¼æä»¥basedir屿§çå¼åæäºè¯»è 设置çå¼ã读è å¯ä»¥èªè¡å°projectå ç´ çbasedir屿§å»æåè¿è¡antççè¿è¡ç»æï¼æ¤æ¶basedirçå¼åæäºE:"ï¼å³ä¸ºAntæä»¶æä»¶çç¶ç®å½ã
æçæ¶åï¼è¯»è å¯è½æè¿ç§éæ±ï¼å³æ³å¾å°æä¸ªproject䏿æçtargetçåç§°ï¼è¯»è å¯ä»¥éè¿å¨antå½ä»¤éå ä¸-proecthelpæ¥è¾¾å°è¯¥ç®çãä¾å¦é对ä¸è¿°çä¾åæä»¬è¿è¡ant âprojecthelpï¼è¾åºç»æå¦ä¸ï¼
Buildfile: build.xml
Main targets:
Other targets:
sayBaseDir
Default target: sayBaseDir
2. targetå ç´
å®ä¸ºAntçåºæ¬æ§è¡åå ï¼å®å¯ä»¥å å«ä¸ä¸ªæå¤ä¸ªå ·ä½çä»»å¡ãå¤ä¸ªtargetå¯ä»¥åå¨ç¸äºä¾èµå ³ç³»ã宿å¦ä¸å±æ§ï¼
1ï¼name屿§
æå®targetå ç´ çåç§°ï¼è¿ä¸ªå±æ§å¨ä¸ä¸ªprojectå ç´ ä¸æ¯å¯ä¸çãæä»¬å¯ä»¥éè¿æå®targetå ç´ çåç§°æ¥æå®æä¸ªtargetã
2ï¼depends屿§
ç¨äºæè¿°targetä¹é´çä¾èµå ³ç³»ï¼è¥ä¸å¤ä¸ªtargetåå¨ä¾èµå ³ç³»æ¶ï¼éè¦ä»¥â,âé´éãAntä¼ä¾ç §depends屿§ä¸targetåºç°ç顺åºä¾æ¬¡æ§è¡æ¯ä¸ªtargetã被ä¾èµçtargetä¼å æ§è¡ã
3ï¼if屿§
ç¨äºéªè¯æå®ç屿§æ¯å¦åå¨ï¼è¥ä¸åå¨ï¼æå¨targetå°ä¸ä¼è¢«æ§è¡ã
4ï¼unless屿§
è¯¥å±æ§çåè½ä¸if屿§çåè½æ£å¥½ç¸åï¼å®ä¹ç¨äºéªè¯æå®ç屿§æ¯å¦åå¨ï¼è¥ä¸åå¨ï¼æå¨targetå°ä¼è¢«æ§è¡ã
5ï¼description屿§
è¯¥å±æ§æ¯å ³äºtargetåè½çç®çæè¿°å说æã
ä¸é¢å¸¦é¢è¯»è
æ¥çä¸ä¸ªå屿§ç»¼å使ç¨çä¾åãä¿®æ¹E:"build.xmlæä»¶ï¼ä¿®æ¹åçå
容å¦ä¸ï¼
è¿å
¥Eçåè¿è¡ant targetBï¼å¯çå°å¦ä¸å¾æç¤ºçè¿è¡ç»æï¼
读è åæç»æåå¯ä»¥çå°ï¼æä»¬è¿è¡çæ¯å为targetBçtargetï¼å 该targetä¾èµäºtargetAï¼æä»¥targetAå°é¦å 被æ§è¡ï¼åæ¶å 为系ç»å®è£ äºjavaç¯å¢ï¼æä»¥ant.java.version屿§åå¨ï¼æ§è¡äºtargetAè¿ä¸ªtargetï¼è¾åºä¿¡æ¯ï¼[echo] Java Version: 1.5ï¼targetAæ§è¡å®æ¯åï¼æ¥çæ§è¡targetBï¼å 为amigoä¸åå¨ï¼èunless屿§æ¯å¨ä¸å卿¶è¿å ¥æå¨çtargetçï¼ç±æ¤å¯ç¥targetBå¾ä»¥æ§è¡ï¼è¾åºä¿¡æ¯ï¼The base dir is: E:"ã
3. propertyå ç´
该å ç´ å¯çä½åéæè åæ°çå®ä¹ï¼projectç屿§å¯ä»¥éè¿propertyå ç´ æ¥è®¾å®ï¼ä¹å¯å¨Antä¹å¤è®¾å®ãè¥è¦å¨å¤é¨å¼å ¥ææä»¶ï¼ä¾å¦build.propertiesæä»¶ï¼å¯ä»¥éè¿å¦ä¸å 容å°å ¶å¼å ¥ï¼<property file=â build.propertiesâ/>
propertyå ç´ å¯ç¨ä½taskç屿§å¼ãå¨task䏿¯éè¿å°å±æ§åæ¾å¨â${âåâ}âä¹é´ï¼å¹¶æ¾å¨task屿§å¼çä½ç½®æ¥å®ç°çã
Antæä¾äºä¸äºå ç½®ç屿§ï¼å®è½å¾å°çç³»ç»å±æ§çå表ä¸Javaææ¡£ä¸System.getPropertis()æ¹æ³å¾å°ç屿§ä¸è´ï¼è¿äºç³»ç»å±æ§å¯åèsunç½ç«ç说æã
åæ¶ï¼Antè¿æä¾äºä¸äºå®èªå·±çå ç½®å±æ§ï¼å¦ä¸ï¼
basedirï¼projectåºç®å½çç»å¯¹è·¯å¾ï¼è¯¥å±æ§å¨è®²è§£projectå ç´ æ¶æè¯¦ç»è¯´æï¼ä¸åèµè¿°ï¼
ant.fileï¼buildfileçç»å¯¹è·¯å¾ï¼å¦ä¸é¢çåä¾åä¸ï¼ant.fileçå¼ä¸ºE:"build.xmlï¼
ant.versionï¼Antççæ¬ï¼å¨æ¬æä¸ï¼å¼ä¸º1.7.0ï¼
ant.project.nameï¼å½åæå®çprojectçååï¼å³åæè¯´å°çprojectçname屿§çå¼ï¼
ant.java.versionï¼Antæ£æµå°çJDKççæ¬ï¼å¨ä¸ä¾è¿è¡ç»æä¸å¯çå°ä¸º1.5ã
ä¸é¢è®©è¯»è æ¥çä¸ä¸ªpropertyå ç´ ä½¿ç¨çç®åä¾åãä¿®æ¹E:"build.xmlæä»¶ï¼å 容å¦ä¸ï¼
该ä¾çè¿è¡ç»æå¦ä¸å¾æç¤ºï¼
ç±æ¤è¯»è å¯ä»¥çåºï¼éè¿å¦ä¸ä¸¤ä¸ªè¯å¥ï¼
<property name="name" value="amigo"/>
<property name="age" value="25"/>
æä»¬è®¾ç½®äºå为nameåageçä¸¤ä¸ªå±æ§ï¼è¿ä¸¤ä¸ªå±æ§è®¾ç½®åï¼è¯»è å¨ä¸æä¸å¯ä»¥éè¿${name}å${age}åå«åå¾è¿ä¸¤ä¸ªå±æ§çå¼ã
ä¸ï¼ Antç常ç¨ä»»å¡
å¨Antå·¥å ·ä¸æ¯ä¸ä¸ªä»»å¡å°è£ äºå ·ä½è¦æ§è¡çåè½ï¼æ¯Antå·¥å ·çåºæ¬æ§è¡åä½ã卿¬å°èä¸ï¼ä¸»è¦å¼å¯¼è¯»è æ¥çä¸Antç常ç¨ä»»å¡åå ¶ä½¿ç¨ä¸¾ä¾ã
1. copyä»»å¡
该任å¡ä¸»è¦ç¨æ¥å¯¹æä»¶åç®å½çå¤å¶åè½ã举ä¾å¦ä¸ï¼
Eg1.å¤å¶å个æä»¶ï¼<copy file="file.txt" tofile="copy.txt"/>
Eg2.对æä»¶ç®å½è¿è¡å¤å¶ï¼
<copy todir="../newdir/dest_dir">
<fileset dir="src_dir"/>
</copy>
Eg3. å°æä»¶å¤å¶å°å¦å¤çç®å½ï¼
<copy file="file.txt" todir="../other/dir"/>
2. deleteä»»å¡
对æä»¶æç®å½è¿è¡å é¤ï¼ä¸¾ä¾å¦ä¸ï¼
Eg1. å é¤æä¸ªæä»¶ï¼<delete file="photo/amigo.jpg"/>
Eg2. å é¤æä¸ªç®å½ï¼<delete dir="photo"/>
Eg3. å 餿æçå¤ä»½ç®å½æç©ºç®å½ï¼
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak"/>
</delete>
3. mkdirä»»å¡
å建ç®å½ãegï¼<mkdir dir="build"/>
4. moveä»»å¡
ç§»å¨æä»¶æç®å½ï¼ä¸¾ä¾å¦ä¸ï¼
Eg1. ç§»å¨å个æä»¶ï¼<move file="fromfile" tofile=âtofileâ/>
Eg2. ç§»å¨å个æä»¶å°å¦ä¸ä¸ªç®å½ï¼<move file="fromfile" todir=âmovedirâ/>
Eg3. ç§»å¨æä¸ªç®å½å°å¦ä¸ä¸ªç®å½ï¼
<move todir="newdir">
<fileset dir="olddir"/>
</move>
5. echoä»»å¡
该任å¡çä½ç¨æ¯æ ¹æ®æ¥å¿æçæ§å¨ç级å«è¾åºä¿¡æ¯ãå®å æ¬messageãfileãappendålevelåä¸ªå±æ§ï¼ä¸¾ä¾å¦ä¸ï¼
<echo message="Hello,Amigo" file="logs/system.log" append="true">
åï¼ å©ç¨Antæå»ºåé¨ç½²Javaå·¥ç¨
Antå¯ä»¥ä»£æ¿ä½¿ç¨javacãjavaåjarçå½ä»¤æ¥æ§è¡javaæä½ï¼ä»èè¾¾å°è½»æ¾çæå»ºåé¨ç½²Javaå·¥ç¨çç®çãä¸é¢æ¥çå 个ç¥è¯ç¹ã
1. å©ç¨Antçjavac任塿¥ç¼è¯javaç¨åº
Antçjavacä»»å¡ç¨äºå®ç°ç¼è¯Javaç¨åºçåè½ãä¸é¢æ¥çä¸ä¸ªç®åçä¾åï¼
é¦å æä»¬å»ºç«å为antstudyçJavaå·¥ç¨ï¼å»ºç«srcç®å½ä¸ºæºä»£ç ç®å½ï¼å¨srcç®å½ä¸å»ºç«HelloWorld.javaè¿ä¸ªç±»æä»¶ã该类æä»¶çå 容å¦ä¸ï¼
åæ¶å¨antstudyå·¥ç¨çæ ¹ç®å½ä¸å»ºç«build.xmlæä»¶ï¼å¨è¯¥æä»¶ä¸ç¼è¯srcç®å½ä¸çjavaæä»¶ï¼å¹¶å°ç¼è¯åçclassæä»¶æ¾å
¥build/classesç®å½ä¸ï¼å¨ç¼è¯åï¼éæ¸
é¤classesç®å½ï¼è¯¥æä»¶çå
容å¦ä¸ï¼
è¿è¡è¯¥build.xmlæä»¶ï¼å¯å¨å·¥ç¨ä¸çå°æ°å¢äºbuild/classesç®å½ï¼å¹¶å¨è¯¥ç®å½ä¸çæäºç¼è¯åçHelloWorld.classæä»¶ã
2. 使ç¨Antçjavaä»»å¡è¿è¡Javaç¨åº
Antä¸å¯ä»¥ä½¿ç¨javaä»»å¡å®ç°è¿è¡Javaç¨åºçåè½ãä¸é¢å¨1çä¾åä¸è¿è¡å¦ä¸çä¿®æ¹ï¼ä¿®æ¹åçbuild.xmlæä»¶çå
容å¦ä¸ï¼
è¿è¡è¯¥build.xmlæä»¶ï¼å¯å¨æ§å¶å°çå°HelloWorldçmainæ¹æ³çè¾åºã
3. 使ç¨Antçjarä»»å¡çæjaræä»¶
读è
å¯ä»¥å¨ä¸ä¾çåºç¡ä¸æ´è¿ä¸æ¥ï¼æ¥çæjarå
ï¼å¯å¨runè¿ä¸ªtargetä¸åå ä¸å¦ä¸targetï¼
æ¤æ¶å°antçprojectçdefault屿§è®¾ç½®ä¸ºjarï¼åæ¶è¿è¡è¯¥build.xmlæä»¶ï¼è¿è¡å®æ¯åï¼å¯çå°å¨å·¥ç¨ç®å½ä¸çæäºä¸ä¸ªjarå HelloWorld.jarã
4. 使ç¨Antçwar任塿å J2EE Web项ç®
建ç«ä¸ä¸ªJ2EE Webå·¥ç¨ï¼å
¶ç®å½ç»æå¦ä¸å¾æç¤ºï¼
å ¶ä¸src为æºä»£ç ç®å½ï¼WebRoot为åjspåæ¾ç®å½ï¼lib为工ç¨çå ç®å½ãå¨antwebprojectå·¥ç¨ç®å½ä¸å»ºç«äºbuild.xmlæä»¶ï¼è¯¥æä»¶ä¸ºè¯¥å·¥ç¨çAntæä»¶æä»¶ã读è å¯ä»¥srcç®å½ä¸æ¾å ¥å¨åç»ä¾åä¸å¼åçHelloWorld.javaæä»¶ï¼å¹¶å¨WebRootä¸å»ºç«index.jspæä»¶ï¼å ¶å 容å¾ç®åï¼å°±æ¯è¾åºHelloä¿¡æ¯ï¼ä»£ç å¦ä¸æç¤ºï¼
æ¥ä¸æ¥ç¼åbuild.xmlæä»¶ï¼å ¶å 容å¦ä¸ï¼
åtargetçä½ç¨å¨å 容ä¸å·²ç»è¿è¡è¯´æï¼å¨æ¤ä¸åèµè¿°ãè¿è¡è¯¥buildæä»¶ï¼æ´æ°ç®å½åï¼å¯çå°å¨buildç®å½ä¸çæäºantwebproject.waræä»¶ï¼è§£å¼åå¯çå°å ¶ç®å½ç»æå¦ä¸ï¼