[转]ç¨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æ件ï¼å
容å¦ä¸ï¼
<project name="helloWorld">
<target name="sayHelloWorld">
<echo message="Hello,Amigo"/>
</target>
</project>
读è
å¯ä»¥è¿å
¥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æ件ï¼ä¿®æ¹åçå 容å¦ä¸ï¼
<project name="projectStudy" default="sayBaseDir" basedir="E:"apache-ant-1.7.0">
<target name="sayBaseDir">
<echo message="The base dir is: ${basedir}"/>
</target>
</project>
ä»ä¸é¢çå
容æ们å¯ä»¥çåºï¼å¨è¿éå®ä¹äº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æ件ï¼ä¿®æ¹åçå
容å¦ä¸ï¼
<project name="targetStudy">
<target name="targetA" if="ant.java.version">
<echo message="Java Version: ${ant.java.version}"/>
</target>
<target name="targetB" depends="targetA" unless="amigo">
<description>
a depend example!
</description>
<echo message="The base dir is: ${basedir}"/>
</target>
</project>
è¿å
¥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æ件ï¼å 容å¦ä¸ï¼
<project name="propertyStudy" default="example">
<property name="name" value="amigo"/>
<property name="age" value="25"/>
<target name="example">
<echo message="name: ${name}, age: ${age}"/>
</target>
</project>
该ä¾çè¿è¡ç»æå¦ä¸å¾æ示ï¼
ç±æ¤è¯»è å¯ä»¥çåºï¼éè¿å¦ä¸ä¸¤ä¸ªè¯å¥ï¼
<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è¿ä¸ªç±»æ件ã该类æ件çå 容å¦ä¸ï¼
public static void main(String[] args) {
System.out.println("Hello,Amigo");
}
}
åæ¶å¨antstudyå·¥ç¨çæ ¹ç®å½ä¸å»ºç«build.xmlæ件ï¼å¨è¯¥æ件ä¸ç¼è¯srcç®å½ä¸çjavaæ件ï¼å¹¶å°ç¼è¯åçclassæ件æ¾å
¥build/classesç®å½ä¸ï¼å¨ç¼è¯åï¼éæ¸
é¤classesç®å½ï¼è¯¥æ件çå
容å¦ä¸ï¼
<project name="javacTest"default="compile" basedir=".">
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
</project>
è¿è¡è¯¥build.xmlæ件ï¼å¯å¨å·¥ç¨ä¸çå°æ°å¢äºbuild/classesç®å½ï¼å¹¶å¨è¯¥ç®å½ä¸çæäºç¼è¯åçHelloWorld.classæ件ã
2. 使ç¨Antçjavaä»»å¡è¿è¡Javaç¨åº
Antä¸å¯ä»¥ä½¿ç¨javaä»»å¡å®ç°è¿è¡Javaç¨åºçåè½ãä¸é¢å¨1çä¾åä¸è¿è¡å¦ä¸çä¿®æ¹ï¼ä¿®æ¹åçbuild.xmlæ件çå
容å¦ä¸ï¼
<project name="javaTest" default="jar" basedir=".">
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile" depends="clean">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="run" depends="compile">
<java classname="HelloWorld">
<classpath>
<pathelement path="build/classes"/>
</classpath>
</java>
</target>
</project>
è¿è¡è¯¥build.xmlæ件ï¼å¯å¨æ§å¶å°çå°HelloWorldçmainæ¹æ³çè¾åºã
3. 使ç¨Antçjarä»»å¡çæjaræ件
读è
å¯ä»¥å¨ä¸ä¾çåºç¡ä¸æ´è¿ä¸æ¥ï¼æ¥çæjarå
ï¼å¯å¨runè¿ä¸ªtargetä¸åå ä¸å¦ä¸targetï¼
<jar destfile="helloworld.jar" basedir="build/classes">
<manifest>
<attribute name="Main-class" value="HelloWorld"/>
</manifest>
</jar>
</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ä¿¡æ¯ï¼ä»£ç å¦ä¸æ示ï¼
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>antæå æµè¯</title>
</head>
<body>
Hello,Ant
</body>
</html>
æ¥ä¸æ¥ç¼åbuild.xmlæ件ï¼å ¶å 容å¦ä¸ï¼
<project name="antwebproject" default="war"basedir=".">
<property name="classes" value="build/classes"/>
<property name="build"value="build"/>
<property name="lib"value="WebRoot/WEB-INF/lib"/>
<!-- å é¤buildè·¯å¾-->
<target name="clean">
<delete dir="build"/>
</target>
<!-- 建ç«build/classesè·¯å¾ï¼å¹¶ç¼è¯classæ件å°build/classesè·¯å¾ä¸-->
<target name="compile" depends="clean">
<mkdir dir="${classes}"/>
<javac srcdir="src" destdir="${classes}"/>
</target>
<!-- æwarå -->
<target name="war" depends="compile">
<war destfile="${build}/antwebproject.war" webxml="WebRoot/WEB-INF/web.xml">
<!-- æ·è´WebRootä¸é¤äºWEB-INFåMETA-INFç两个æ件夹-->
<fileset dir="WebRoot" includes="**/*.jsp"/>
<!-- æ·è´libç®å½ä¸çjarå -->
<lib dir="${lib}"/>
<!-- æ·è´build/classesä¸çclassæ件-->
<classesdir="${classes}"/>
</war>
</target>
</project>
åtargetçä½ç¨å¨å 容ä¸å·²ç»è¿è¡è¯´æï¼å¨æ¤ä¸åèµè¿°ãè¿è¡è¯¥buildæ件ï¼æ´æ°ç®å½åï¼å¯çå°å¨buildç®å½ä¸çæäºantwebproject.waræ件ï¼è§£å¼åå¯çå°å ¶ç®å½ç»æå¦ä¸ï¼