[doc] compile using ant
*** 注意 ***
單純講compile,不討論classpath、不討論相依性:)
這一次真的要用ant來compile我們的java code了:)
(基於我是懶人的理由,就用上一篇寫好的build.xml好了)
build.xml
---------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
</target>
</project>
=========================================================
HelloKitty.java
---------------------------------------------------------
public class HelloKitty{
public static void main(String[] args){
System.out.println("Hello Kitty");
}
}
=========================================================
接著"要怎麼compile呢?"由上一篇的提示,我們應該要使用task
而task可以被包含在target之中(如果放在target的外面,那就
是不管怎麼樣都會執行到,噓. 這是上一篇的筆誤啊. orz)
經由ant的網站上,你能手冊中找到這一個連結
http://ant.apache.org/manual/coretasklist.html
裡面有所有的built-in task(內建的呦xd)
打開後往下翻一點你會看到一個熟悉的`keyword` => javac
你可能會很興奮地像我一樣直接先加在target中跑看看:)
build.xml
---------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac />
</target>
</project>
=========================================================
% ant i-need-kitty
---------------------------------------------------------
Buildfile: build.xml
i-need-kitty:
[echo] Kitty Kitty
BUILD FAILED
/home/slayer/test/anttest/build.xml:6: srcdir attribute must be set!
Total time: 0 seconds
=========================================================
唔,竟然發生錯誤了。別緊張! 早點認識錯誤訊息是有益健康的:)
這也是coder 必要的conversation。
從頭看起,發現了build.xml的完整路徑
接著是冒號6冒號
接著又是另一句話srcdir attribute must be set!
直覺上來講(常看error message的人應用的直覺 *泣*)
6是檔案內的第6行,而接著的是解決問題的線索:
srcdir attribute must be set
理解一下這句,....必需被設定。....也就是srcdir attribute
我們知道,xml都是由element組成,element又有attribute與children element
所以,我們應該要找出到底是那一個element沒有設定srcdir這屬性,
打開build.xml找到第6行,就是<javac />。
您可以直接改為<javac srcdir="." />
但是,因為這是一篇教學文章,所以俺就多說一點^^
有手冊,大伙隨我大聲唸RTFM XD
http://ant.apache.org/manual/CoreTasks/javac.html
core tasks的手冊上風格非常一致。你幾乎都會看到一張`表格`
通常那一段落的標題是Parameters。
而表格幾乎都是3個欄位分別為這一個task可以設定的屬性(Attribute)、
這一個task該屬性的描述(Description)也許是該注意的事情或說明這屬性的功能、
這一個屬性是不是需要的(Required),如果上面寫著yes你卻沒設定,就噴你error :P
我們查了一下javac task的srcdir中required欄位寫些什麼:)
---------------------------------------------------------
Yes, unless nested <src> elements are present.
=========================================================
由這些提示,至少有2種方法可以用。一為加上srcdir或用內嵌<src>元素
build.xml (use srcdir)
---------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac srcdir="." />
</target>
</project>
=========================================================
build.xml (nested <src>)
註: 有nested element的core task。在其手冊裡一定會有範例:)
---------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac>
<src path="." />
</javac>
</target>
</project>
=========================================================
% ant i-need-kitty
---------------------------------------------------------
Buildfile: build.xml
i-need-kitty:
[echo] Kitty Kitty
[javac] Compiling 1 source file
BUILD SUCCESSFUL
Total time: 1 second
=========================================================
總算我們能成功的compile HelloKitty了。
[tips]
雖然加好了路徑可以compile了。但是當有一天您事業越來越來
可能需要寫有好幾個target的buildfile,如果每一個srcdir都
要自己打那真會吐血的^^
所以,我們要來簡單介紹一下如何使用`變數`。
build.xml (use property task)
---------------------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<project name="nice" basedir=".">
<property name="src.dir" value="."/>
<target name="i-need-kitty"
description="just get me a hello kitty">
<echo>Kitty Kitty</echo>
<javac srcdir="${src.dir}" />
</target>
</project>
=========================================================
我們把檔案做了一點改變,把原先設定的srcdir="."改成用src.dir變數代換。
雖然是多寫了幾個字,但是他帶來更多的方便。不管你有幾個src路徑要改
只要改<property name="src.dir" value="."/>這一行就足夠了:)
--
夫兵者不祥之器物或惡之故有道者不處君子居則貴左用兵則貴右兵者不祥之器非君子
之器不得已而用之恬淡為上勝而不美而美之者是樂殺人夫樂殺人者則不可得志於天下
矣吉事尚左凶事尚右偏將軍居左上將軍居右言以喪禮處之殺人之眾以哀悲泣之戰勝以
喪禮處之道常無名樸雖小天下莫能臣侯王若能守之萬物將自賓天地相合以降甘露民莫
之令而自均始制有名名亦既有夫亦將知止知止可以 pc210-59-94-148.nutn.edu.tw海
作者在 06/04/08 10:18:37 從 pc210-59-94-148.nutn.edu.tw 修改這篇文章
作者在 06/04/08 11:11:17 從 pc210-59-94-148.nutn.edu.tw 修改這篇文章
java 近期熱門文章
PTT數位生活區 即時熱門文章