網路資源
官方文件
http://ant.apache.org/manual/index.html
各個task的意義 Ant Tasks > Core Tasks
良葛格教學文件
1.什麼是 Ant?
http://www.javaworld.com.tw/jute/post/view?bid=11&id=48098&tpg=1&ppg=1&sty=0&age=0#48098
2.設定 Ant
http://www.javaworld.com.tw/jute/post/view?bid=11&id=90887&tpg=1&ppg=1&sty=0&age=0#90887
3.瞭解Ant buildfile
http://www.javaworld.com.tw/jute/post/view?bid=11&id=48100&tpg=1&ppg=1&sty=0&age=0#48100
4.Ant常用任務標籤
http://www.javaworld.com.tw/jute/post/view?bid=11&id=48101&sty=2&keywords=ant%E5%85%A5%E9%96%80
5.使用Ant建構實際範例
http://www.javaworld.com.tw/jute/post/view?bid=11&id=48102&sty=2&keywords=ant%E5%85%A5%E9%96%80
6.路徑(path)參考
http://www.javaworld.com.tw/jute/post/view?bid=11&id=52442&sty=2&keywords=ant%E5%85%A5%E9%96%80
7.條件式目標
http://www.javaworld.com.tw/jute/post/view?bid=11&id=48105&sty=2&keywords=ant%E5%85%A5%E9%96%80
補充:
1 | <?xml version="1.0"?> |
2 | <project name="Learning Hibernate" default="compile" basedir="."> |
3 | <target name="prepare" description="Sets up build structures" if="haha"> |
4 | <delete dir="${class.root}"/> |
5 | <mkdir dir="${class.root}"/> |
6 | </target> |
7 | <target name="compile" depends="prepare"> |
8 | <javac srcdir="${source.root}" |
9 | destdir="${class.root}" |
10 | debug="on" |
11 | optimize="off" |
12 | deprecation="on"> |
13 | </javac> |
14 | </target> |
15 | </project> |
view plain | print | ? |
條件是設定在prepare這個target,因此若直接執行ant,因為沒有加上參數 ant -Dhaha=true ,所以prepare這個target不會被執行,但是compile target仍然會被執行喔!
8.調用其它buildfile
http://www.javaworld.com.tw/jute/post/view?bid=11&id=48106&sty=2&keywords=ant%E5%85%A5%E9%96%80
9.自動化建構與測試 - Ant 結合 JUnit
http://www.javaworld.com.tw/jute/post/view?bid=11&id=48107&sty=2&keywords=ant%E5%85%A5%E9%96%80
補充:
如 果您要讓Ant能支援JUnit,建議您直接將JUnit的junit.jar放置在Ant的lib目錄,並記得改變CLASSPATH中原先有關於 JUnit的設定,例如:%ANT_HOME/lib/junit.jar,雖然也有其它的方式可以設定,但這是最快最簡單的方法。
安裝
1.下載檔案 http://ant.apache.org/bindownload.cgi
2.解壓縮至C:/Program Files/
3.設定系統變數 ANT_HOME = C:/Program Files/apache-ant-1.6.2;Path = ;%ANT_HOME%/bin;
4.下cmd指令 ant -version有成功設定OK
執行範例
build.xml
1 | <?xml version="1.0"?> |
2 | <project name="Learning Hibernate" default="run" basedir="."> |
3 | <property name="source.root" value="src"/> |
4 | <property name="class.root" value="classes"/> |
5 | <path id="project.class.path"> |
6 | <pathelement location="${class.root}" /> |
7 | </path> |
8 | <target name="prepare" description="Sets up build structures"> |
9 | <delete dir="${class.root}"/> |
10 | <mkdir dir="${class.root}"/> |
11 | </target> |
12 | <target name="compile" depends="prepare"> |
13 | <javac srcdir="${source.root}" |
14 | destdir="${class.root}" |
15 | debug="on" |
16 | optimize="off" |
17 | deprecation="on"> |
18 | </javac> |
19 | </target> |
20 | <target name="run" description="Run a Hibernate sample" depends="compile"> |
21 | <java classname="momopack.HelloWorld" fork="true"> |
22 | <classpath refid="project.class.path"/> |
23 | </java> |
24 | </target> |
25 | </project> |
view plain | print | ? |
1根據設定在cmd下ant時會執行名稱為run的target
1 | <project name="Learning Hibernate" default="run" basedir="."> |
view plain | print | ? |
2.在執行該target前會先執行相關depend的target,因此實際執行的順序為prepare > compile > run
1 | <target name="run" description="Run a Hibernate sample" depends="compile"> |
2 | <target name="compile" depends="prepare"> |
view plain | print | ? |
3.classpath正確無誤的話便可看到console後印出"Hello World!!"
結合Junit
安裝
1.必須另外把junit.jar放到 ant/lib下
執行範例
build.xml
1 | <?xml version="1.0"?> |
2 | <project name="Learning Hibernate" default="compile" basedir="."> |
3 | <property name="source.root" value="src"/> |
4 | <property name="class.root" value="classes"/> |
5 | <property name="lib.dir" value="lib"/> |
6 | <property name="report.dir" value="unittestreport"/> |
7 | <path id="project.class.path"> |
8 | <pathelement location="${class.root}" /> |
9 | <fileset dir="${lib.dir}"> |
10 | <include name="*.jar"/> |
11 | </fileset> |
12 | </path> |
13 | <target name="prepare" description="Sets up build structures"> |
14 | <delete dir="${class.root}"/> |
15 | <delete dir="${report.dir}"/> |
16 | <mkdir dir="${class.root}"/> |
17 | <mkdir dir="${report.dir}"/> |
18 | </target> |
19 | <target name="compile" depends="prepare"> |
20 | <javac srcdir="${source.root}" |
21 | destdir="${class.root}" |
22 | debug="on" |
23 | optimize="off" |
24 | deprecation="on"> |
25 | </javac> |
26 | </target> |
27 | <target name="test" depends="compile"> |
28 | <junit printsummary="yes"> |
29 | <formatter type="xml"/> |
30 | <test name="test.tatung.util.StrUtilTest" todir="${report.dir}"/> |
31 | <classpath refid="project.class.path"/> |
32 | </junit> |
33 | </target> |
34 | <target name="report" depends="test"> |
35 | <junitreport todir="${report.dir}"> |
36 | <fileset dir="${report.dir}"> |
37 | <include name="TEST-*.xml"/> |
38 | </fileset> |
39 | <report format="frames" todir="${report.dir}/html"/> |
40 | </junitreport> |
41 | </target> |
42 | </project> |
view plain | print | ? |
問題排除
如task執行時出現OutOfMenory錯誤,則可嘗試加大jvm的記憶體使用量
1 | <target name="compile" description="compile *.java to *.class" depends="initiate"> |
2 | <echo message="compile *.java ..." /> |
3 | <javac fork="true" memoryInitialSize="512m" memoryMaximumSize="512m"> |
4 | destdir="${basedir}/classes" |
5 | srcdir="${java.src.dir}"> |
6 | <classpath refid="project.class.path"/> |
7 | </javac> |
8 | </target> |
view plain | print | ? |