You are on page 1of 16

o m

i.c
dil
Another Nice Tool
vaja
w.

Hazırlayan: İlgi KESKİN

12.01.2005
ww
m
İÇİNDEKİLER

ANT’A GİRİŞ ....................................................................................................... 2

o
ANT’IN KURULUMU ............................................................................................. 3

Gereken Kaynakları Web Sitesinden İndirme .............................................................. 3

i.c
Sıkıştırılmış Klasör ve Dizinleri Açma ............................................................................. 3

Çevre Değişkenlerini Güncelleme .................................................................................. 3

ANT’LA İLGİLİ TEMEL BİLGİLER ........................................................................... 4

dil
Basit Bir Build.xml Örneği ................................................................................................... 4

Açıklamalar............................................................................................................................ 4

BİR PROJE ÖRNEĞİ............................................................................................. 7


va
KISALTMALAR................................................................................................... 15

KAYNAKLAR...................................................................................................... 15
ja
w.
ww

1
ANT

m
ANT’A GİRİŞ

Ant; Apache Yazılım tarafından geliştirilmiş, açık kaynak java tabanlı bir yazılım geliştirme
aracıdır. Ant kısaltmasının açılımı Another Nice Tool olarak bilinir. Tomcat, JDOM gibi açık

o
kaynak ürünlerin geliştirilmesinde kullanılmıştır.

Büyük bir projede çalıştığımızı düşünelim. Bu proje bir Java projesi olsun ve bir çok .java
uzantılı kütüklerden oluşsun. Diğer sınıflara bağlı olan sınıfların olduğunu ve bu sınıfların farklı

i.c
dizinler altında yer aldığını, çıktı kütüklerinin de farklı dizinlerde yer alacağını düşünelim.
Farklı uygulamalar için çeşitli proje geliştirme yolları olacaktır. Bunların yönetimi sırasında
kütüklerin derlenmesi, dizinlerin değiştirilmesi ile çok fazla zaman kaybı söz konusu olacaktır.
Ant, böyle bir durumda size düşen iş yükünü oldukça hafifleten bir araçtır. Ant, aslında Java
Programlama dili için geliştirilmiş bir geliştirme aracıdır; fakat bir çok farklı alanlarda da
kullanılabilir. Salt Java ile kodlanmıştır ve platform bağımsızdır. Özellikle karmaşık, defalarca
tekrarlanan işlemleri otomatikleştirmek için kullanılmaktadır. Ant, XML formatındaki

dil
belgelerde yer alan komutları kabul eder. Konfigürasyon dosyası XML formatındadır. Bu
nedenle, genişletilebilirdir.

Ant 'ın da bir takım eksikleri vardır. Uzun yıllar bu eksikler antmerge ile kapatılmaya çalışıldı.
Ant 1.6 versiyonu ile beklenilen özellikler sağlandı.

İşlevsel olarak, Unix İşletim Sistemindeki make programının platform bağımsız türevi gibi
va
düşünülebilir.

Ant’ın make’e tercih edilmesinin nedenleri:

• Make’e göre taşınabilirdir: Sadece Java VM (1.1 ya da daha ileri versiyonu)’e


gereksinim duyar. Make, işletim sistemine özel komutları kullanır. Make’in Windows
altında çalışabilmesi için yüklenmesi gereken Unix Emülatörü (Cygwin) yaklaşık 37
ja

MB’dır.

• Make, çok yoğun sözdizim kurallarına dayanır. Eğer Make içinde bir TAB karakteri
unuttuysanız, birden hiç bir şey çalışmaz.

• Ant, Java’ya özgü işlemler için daha uygundur: Tüm görevler tek bir VM (virtual
w.

machine) tarafından çalıştırıldığında, Ant Make’e göre daha hızlı çalışır. Ayrıca,
javadoc yaratma, JAR/WAR kütüklerini oluşturma ve EJB’lerle çalışma gibi bazı
Java’ya özgü işlemler için de kullanımı daha kolaydır.

• Ant, Make gibi Unix’in Shell komutlarıyla değil, daha esnek bir yaklaşım olarak java
sınıflarıyla kodlanır.
ww

2
ANT

m
ANT’IN KURULUMU
Ant, açık kaynak bir araç olduğu için sıklıkla versiyonu değiştirilen bir araçtır. Kurulum

o
açıklaması, tüm versiyonlar için geçerli olması açısından, genel anlamda verilmektedir.

i.c
Gereken Kaynakları Web Sitesinden İndirme
• http://archive.apache.org/dist/ant/binaries/ adresinden istenilen bir sürümün
jakarta-ant-bin.zip ve optional.jar dizinleri indirilir.

Sıkıştırılmış Klasör ve Dizinleri Açma

dil
• Sıkıştırılmış dizinler, C:\Java\Ant izinde Ant dizinine açılır.
• Seçilen sürümün optional.jar kütüğü C:\Java\Ant\lib izine taşınır.
Bu kütük sadece FTP, Junit, EJB işlevleri gibi opsiyonel Ant işlevleri için kullanılır.
• %ANT_HOME%\lib altındaki tüm JAR kütükleri, Ant’ın çalıştırılmasıyla çağırılan ant.bat
ile CLASSPATH’e eklenir.
va
Çevre Değişkenlerini Güncelleme
• ANT_HOME değişkeni Ant’ın sıkıştırılmış dizininin açıldığı yeri göstermek üzere
yaratılır.
• JAVA_HOME değişkeni, yazılımın kurulduğu makinede JDK ’nın yerini gösterecek
şekilde ayarlanır.
• Xerces gibi JAXP-Uyumlu bir XML Parser’a “latest binaries” ile gösterilen sıkıştırılmış
ja

klasöre http://xml.apache.org/dist/xerces-j adresinden erişilir. Klasör açılır ve


xerces.jar CLASSPATH değişkenine eklenir.
• PATH değişkenine %ANT_HOME%\bin eklenir.
w.
ww

3
ANT

m
ANT’LA İLGİLİ TEMEL BİLGİLER

Ant build kütüğü XML formatındadır. Build kütüğününün üzerinde işlem yapabilmek için, basit

o
bir metin editörü yeterli olacaktır. Harici bir XML parser’a gerek yoktur. Zaten Ant’ın kurulumu
sırasında JAXP Uyumlu XML parser yüklenir.

Aşağıda basit bir Ant örneği ve Ant komutlarıyla ilgili açıklamalar görülmektedir:

i.c
Basit Bir Build.xml Örneği

<?xml version="1.0"?>
<project name="test" default="compile" basedir=".">
<property name="src" value="."/>
<property name="build" value="build"/>

dil
<target name="init">
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init">
<!- - Java kodunu derleme - ->
<javac srcdir="${src}" destdir="${build}"/>
</target>
</project>
va
Açıklamalar

<?xml version="1.0"?>
ja

¾ Ant build kütüğü bir XML kütüğü olduğu için; belge XML bildirisi ile başlar. Bu bildiri
XML’in hangi versiyonun kullanıldığını gösterir. Gerektiğinde otomatik olarak
versiyonun tanınmasını sağlar.
w.

<project name="test" default="compile" basedir=".">

¾ Bir Ant build kütüğünün kök elemanı project ‘tir. Project’in üç niteliği vardır:
ww

o name : Project’in adı, XML için kullanılan alfa-numerik karakterlerden oluşabilir.


o default : Hiç bir target (hedef) belirtilmediğinde varsayılan hedefi gösterir. default
bu üç nitelik arasından gerekli olan tek niteliktir.
o basedir : Ant build kütüğünün referans gösterdiği göreli dizinlerin yer aldığı taban
dizindir. Eğer değer verilmezse build kütüğünün ata dizini kullanılır.

4
ANT

m
<property name="src" value="."/>
<property name="build" value="build"/>

o
¾ Property elemanı; değişkenler gibi, kullanıcının tanımlayabileceği, Ant build kütüğü ile
kullanılabilen özelliklerin bildirimine izin verir. Name niteliği property’nin (özelliğin)
adını, value niteliği ise istenen property’nin değerini belirtir. Yukarıda name’e src,

i.c
value’ya “.” atanmıştır. Bu yolla tanımlı bir property’e referans göstermek için name,
${ ve } karakterleri arasına alınır. Örneğin, src’nin değerine referans göstermek için
${ src } yazılabilir. Bu örnekte src .java kütüklerinin yerini belirtmek amacıyla
kullanılmıştır.

dil
<target name="init">
<mkdir dir="${build}"/>
</target>

¾ Target (hedef) elemanı bir action serisini sarmak amacıyla kullanılmaktadır. Bir
target’ın bir name niteliği vardır. Bu nitelikle, komut satırı gibi başka bir yerden ya da
va
içeriden depends anahtar kelimesiyle referans gösterilebilir ya da doğrudan
çağırılabilir. Örnekteki target “init” tir. Bu target, mkdir komutuyla build property ile
verilmiş olan isme sahip bir dizin oluşturur.

Target’ın bir çok niteliği olabilir. Muhtemel nitelikleri şunlardır:

o name : Bu nitelik target’ın referans gösterilebilmesi için kullanılır. Target


ja

için olması gereken tek nitelik budur.


o depends : Bu target’ın bağlı olduğu virgülle ayrılmış target listesidir. başka
bir deyişle depends bu target’ın çalıştırılmasından önce
çalıştırılması gereken target’ların listesini içerir.
o if : Property’nin değerine bağlı olarak target’a koşullu bir nitelik
w.

eklemeyi sağlar. Örneğin; if="gui-ready" kapsayan target’ın


komutlarının çalıştırılması için kullanılabilir.
o unless : if ‘in ters işlemini yapar. Yani kapsanan target’ların komutlarını
çalıştırır.
o description: Target’ın kısa açıklamasıdır.
ww

<target name="compile" depends="init">


<!- - Java kodunu derle. - ->
<javac srcdir="${src}" destdir="${build}"/>
</target>

5
m
ANT

¾ Daha önce açıklandığı gibi depends; bir target çalıştırılmadan, çalıştırılması gereken
target’ların çalışmasını sağlar. Yukarıdaki build.xml örneğinde depends, compile
çalıştırılmadan init’in çalıştırılması gerektiğini gösterir.

o
<target name="compile" depends="init">

i.c
<!- - Java kodunu derle. - ->
<javac srcdir="${src}" destdir="${build}"/>
</target>

¾ javac komutu ile src property ve build property referans gösterilerek; hedef dizin ile
kaynak dizin belirtilir. Yukarıdaki örnek, javac komutunun çalıştırılmasını ve src ile
belirtilen dizin altında yer alan tüm .java uzantılı kütüklerin derlenmesini ve sonuç

dil
.class uzantılı kütüklerin build ile belirtilen dizin altına yerleştirilmesini sağlar.

Yukarıda yazılan kaynak kodu bir metin editörüne kopyalayıp build.xml adıyla
kaydedebilirsiniz. Bir test dizini yaratıp build.xml kütüğünü bu dizinin altına yerleştirebilirsiniz.
Birkaç .java uzantılı kütük yaratıp hepsini aynı dizinin altına yerleştirebilirsiniz. Örnek olarak
aşağıdaki kodu .java uzantısıyla, bu dizinin altına test.java adıyla yerleştirebilirsiniz.
va
public class test {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

Komut satırından test dizinine girerek aşağıdaki satır yazılırsa:


ant -v
ja

Build adında bir dizin yaratılır, test.java derlenir ve .class kütüğü build dizininin altına
yerleştirilir. –v ant’ı bir sürü işlem yapmaya yönlendirir. Bu işlemlerin birçoğu normalde
kullanılmaz. Komut dizisini tekrar çalıştırırsak, verilecek örnek mesaj şudur:
w.

[javac] test.java omitted as /path/to/temp/build/test.class is up todate

Ant’ın iyi özelliklerinden biri; .java girdi kütükleriyle eşleşen .class çıktı kütüklerini
derlemesidir. Ant’ın bir özelliği de bir build.xml'in bir diğerini referans gösterebilmesidir. Bunu
sağlayan etiket, <import> olarak bilinmektedir. Böylece her projenin ortak hedefleri (target)
ww

tek bir yerde toplanabilir.

6
m
ANT

BİR PROJE ÖRNEĞİ

o
Bu kesim tipik bir Ant build kütüğünü sağlamak ve açıklamak için verilmektedir. Verilen örnek
kolaylıkla değiştirilip kullanılabilir.

Bir projeye başlamadan önce şu üç dizinin kullanılacağı bilinmelidir:

i.c
1. src : Projenin kaynak kütükleri için.
2. build : Ant tarafından derlenecek ve üretilecek çıktı kütükleri için.
3. lib : Sınıf kütüphaneleri ve onlara bağlı kütükler için.

Bir test dizini yaratılır ve bu dizinin altına yukarıda belirtilen üç dizin yerleştirilir. Basit bir java
programı, Ant’ın kullanımını örneklemeye yetecektir. Aşağıdaki program UKLights.java

import javax.swing.*;
import java.awt.*;
public class UKLights extends JFrame {
dil
kütüğüne kopyalanır ve bu kütük, src dizininin altına yerleştirilir.
va
public UKLights() {
super("UKLights");
ImageIcon icon = new ImageIcon("uklights.jpeg");
getContentPane().add(new JLabel(icon));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(315,244));
setVisible(true);
}
ja

public static void main(String args[]) {


new UKLights();
}
}
w.

Burada iki yordam yazılmıştır. Bunların ilki constructor (yapıcı yordam)’dır. Super (ata) sınıfını
çağırarak JFrame’e başlık olarak "UKLights" ilk değeri atanır. ImageIcon adıyla anılan bir
simge yaratılır. Bu resim, uklights.jpg adlı bir kütükteki resimdir. Bu simge, daha sonra
JFrame’e eklenen Jlabel’a eklenir. Varsayılan kapatma işlemi ele alınır. Simgenin boyutları
belirlenir ve frame (çerçeve) görünür hale getirilir. İkinci yordam ise main (ana) programdır.
ww

Bu yordam, java UKLights komutuyla çalıştırılır. Bu program JFrame’de simgeyi görüntüler.


Baz alınan, src, build ve lib dizinlerinin yer aldığı test dizinine girilir.

7
ANT

m
Build.xml kütüğü oluşturulur.
İlk olarak bu kütüğün bir XML kütüğü olduğunu belirtmek üzere aşağıdaki satır yazılır.
Böylece herhangi bir araç, kullanılan XML versiyonu ile ilgili bilgi edinebilecektir.

o
<?xml version="1.0"?>

Ant’ın root (kök) elemanı olan, project:

i.c
<project name="UKLights" default="all" basedir=".">
</project>

satırlarıyla oluşturulur. Build kütüğünün geri kalan kısmını bu eleman içerir. Üç niteliği vardır.
Burada, name niteliği olarak projenin adı verilmiştir. İkinci nitelik olan default olarak,
oluşturulması gereken, varsayılan target olan all verilmiştir. Üçüncü nitelik olan basedir ise
baz alınan dizini belirtmek için kullanılır. Burada “.” ile ifade edilmesinin nedeni, o anda baz

Property tanımları koda eklenir:

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


<property name="build" value="build"/>
dil
alınan dizinin içinde bulunulmasıdır. Baz alınan dizin build kütüğüne görelidir. <project>
</project> etiketlerinin arasında yer alan bir eleman property’dir.
va
<property name="lib" value="lib"/>

Bu property tanımları, build kütüğünde hangi değerlere erişilebileceğini ifade eder. Burada
property’ler aracılığıyla source (kaynak), build ve library (kütüphane) dizinlerini yaratmadan
önce, bu dizinlerin yerleri belirtilir. Bu örneğe bakılarak, bu işlemin çok anlamlı olmadığı
düşünülebilir. Ancak, söz konusu kütüklerin yerleri değiştirildiğinde, property’ler sayesinde bu
dizinlerin referanslarını birer birer değiştirme yükünden kurtulmuş oluruz.
ja

Eğer build kütüğü şu anki haliyle çalıştırılırsa, sistem aşağıda belirtilen hatayı verir:

Buildfile: build.xml
w.

BUILD FAILED

Target `all' does not exist in this project.


Total time: 1 second

Bu, all target’ının tanımlanmadığı anlamına gelir. all target’ını eklersek:


ww

<target name="all" depends="UKLights"


description="Builds the whole project">
<echo>Doing all</echo>
</target>

8
ANT

m
all target’ı UKLights target’ına bağlıdır ;yani UKLights, all çalıştırılmadan çağırılmalıdır.
Açıklanan description (tanım), Ant’ın projecthelp opsiyonu tarafından kullanılacaktır. UKLights
target’ını eklersek:

<target name="UKLights"

o
description="Builds the main UKLights project">
<echo>Doing UKLights</echo>
</target>

i.c
Bu target’ın birer name ve description niteliği vardır. Target description, Ant’ın projecthelp
opsiyonu tarafından, erişilebilir target’ları göstermek amacıyla kullanılır. Eğer aşağıdaki komut
çalıştırılırsa;

ant -projecthelp

Üretiecek çıktı şöyle olur:

Buildfile: build.xml

Main targets: dil


UKLights Builds the main UKLights project
all Builds the whole project
va
Default target: all

Eğer baz alınan dizinin (burada test dizini) altındayken, ant komutu yazılırsa; üretilecek çıktı
şöyle olur:
ja

Buildfile: build.xml

UKLights:
[echo] Doing UKLights

all:
w.

[echo] Doing all

BUILD SUCCESSFUL
Total time: 1 second

Farz edelim, UKLights, all’un kendisine bağlı olması nedeniyle, all’dan önce çağırılmış olsun.
Her iki target’ın da çağırılıp çağırılmadığını öğrenmek üzere, ekrana ekolama yapılır. Target,
ww

Java kütüğünü derlemelidir; bu nedenle aşağıdaki satır eklenir:

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

9
ANT

m
Ant, Java tabanlı komutlar olan java ve javac ile geliştirilmiştir. Javac komutu, srcdir niteliği
ile belirtilen dizinin altında yer alan tüm kütüklerin; derlenmesini ve destdir niteliği ile
belirtilen dizinin altına yerleştirilmesini sağlar. Ant, kaynak kütükleri, .class çıktı kütüklerinden
daha kısa sürede derler. Bu durum, gereken işlevsellik elle yapılmadığı takdirde, Ant’ın diğer
işlevleri için de geçerlidir.

o
Ant, değiştirilmiş build kütüğü üzerinde çalıştırıldığında, aşağıda görülen çıktı üretilir:

i.c
Buildfile: build.xml

UKLights:
[echo] Doing UKLights
[javac] Compiling 1 source file to \blah\blah\blah\build

all:

dil
[echo] Doing all

BUILD SUCCESSFUL
Total time: 2 seconds

Javac komutuna sağlanabilecek birçok opsiyon vardır. Bunların kendilerine ait nitelikleri call
komutuna atanarak, bu opsiyonlar sağlanabilir. Erişilebilinir opsiyonlar: listfiles – derlenen
va
kütükleri listeler; failonerror – derleme hatası oluştuğunda, build’i başarısızlıkla sonlandırır ve
verbose’dur.
Bir niteliğe değer aktarabilmek için value alanına “true” yazmak gerekir. Eğer ant komutu,
build kütüğü üzerinde hiçbir değişiklik yapmadan tekrar çalıştırılırsa, ekrana gelecek olan çıktı
şöyle olur:
ja

Buildfile: build.xml

UKLights:
[echo] Doing UKLights

all:
[echo] Doing all
w.

BUILD SUCCESSFUL
Total time: 1 second

Bu durum, geçen süre içinde hiç derleme yapılmadığını gösterir. Build dizininin altına girilir ve
UKLights.class çalıştırılır. Hiçbir resime ulaşılamaz çünkü resim build dizininin altına
ww

kopyalanmamıştır. Bu satır javac komutundan önce eklenir:

<copy file="${src}/UKLights.jpeg" tofile="${build}/UKLights.jpeg"/>

10
ANT

m
Değiştirilen build kütüğü üzerinde ant komutu çalıştırıldığında, ekranda aşağıdaki ifade
görülür:

[copy] Copying 1 file to C:\docbook\docproj\src\items\ant\files\build

o
Varsayılan durum olarak Ant, eğer söz konusu kütük, hedef kütükten daha yakınsa ya da
hedef kütük yoksa, kütüğü kopyalar. Bu davranışı değiştirmek için overwrite niteliğine “true”

i.c
değerini atamak gerekir. Yeni bir kaynak kütük, programa ekleneceğinde; UKLights.java’nın
Constructor’ını şu şekilde değiştirmek gerekir:

public UKLights() {

dil
super("UKLights");
ImageIcon icon = new ImageIcon("uklights.jpeg");
JButton exitButton = new JButton("Exit");
exitButton.addActionListener(new ExitControl());
JButton aboutButton = new JButton("About");
aboutButton.addActionListener(new AboutControl());
getContentPane().setLayout(new FlowLayout());
getContentPane().add(new JLabel(icon));
va
getContentPane().add(aboutButton);
getContentPane().add(exitButton);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(315,294));
setVisible(true);
}
ja

Exit button ve about button eklenir, layout FlowLayout olarak tanımlanır. JFrame ’in boyutları
arttırılır. ExitControl ise exitButton ’ın event ’lerini (olaylarını) ele almak için tanımlanır.

import java.awt.event.*;
public class ExitControl implements ActionListener {
w.

public void actionPerformed(ActionEvent e) {


System.exit(0);
}
}

Yukarıdaki kütük, ExitControl.java olarak kaydedilir ve bu kütük src dizininin altına


yerleştirilir. ExitControl, “exit” butonuna basıldığında programdan çıkmayı sağlar. About
ww

button, yüklenen resimle ilgili bilgi görüntülemek için yaratılır. Bu butonla ilgili event’ler
(olaylar) AboutControl tarafından ele alınacaktır.

11
ANT

m
import java.awt.event.*;
public class AboutControl implements ActionListener {
public void actionPerformed(ActionEvent e) {
new AboutPopup();

o
}
}

Yukarıdaki kütük, AboutControl.java olarak kaydedilir ve bu kütük src dizininin altına

i.c
yerleştirilir. AboutControl, yeni bir AboutPopup yaratır.

import javax.swing.*;
import java.awt.*;

public class AboutPopup extends JFrame {


public AboutPopup() {

dil
super("About");
String message = "\n";
message+="This image of Earth's city lights was created with
data ";
message+="from the Defense Meteorological Satellite Program
";
message+="(DMSP) Operational Linescan System (OLS). ";
message+="Originally designed to view clouds by moonlight, ";
message+="the OLS is also used to map the locations of
va
permanent ";
message+="lights on the Earth's surface.\n\n";
message+="The image has been modified by Ashley Mills to only
include ";
message+="the UK, the original image and further description
can be ";
message+="found at:\n\n";
message+="http://visibleearth.nasa.gov/cgi-
ja

bin/viewrecord?5826\n\n";
message+="This is also where the description was taken from.";
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(new Dimension(315,294));
JTextPane messagePane = new JTextPane();
messagePane.setBackground(Color.BLACK);
w.

messagePane.setForeground(Color.GRAY);
messagePane.setEditable(false);
messagePane.setText(message);
getContentPane().add(messagePane);
setResizable(false);
setVisible(true);
}
ww

12
ANT

m
Yukarıdaki kütük, AboutPopup.java adıyla src dizininin altına kopyalanır. Bu kütükte, bir
mesaj tanımlıdır. Varsayılan kapatma işlemi ele alınır. JFrame’in boyutları verilir. JTextPane
yaratılır ve bu panelin renkleri verilir vs. Böylece kütük çalıştırıldığında bir arayüz oluşturulur.

Build kütüğündeki "UKLights" target değiştirilir:

o
<target name="UKLights" depends="AboutControl,ExitControl"
description="Builds the main UKLights project">
<echo>Doing UKLights</echo>

i.c
<copy file="${src}/UKLights.jpeg" tofile="${build}/UKLights.jpeg"/>
<javac srcdir="${src}" destdir="${build}" includes="UKLights.java"/>
</target>

UKLights target artık AboutControl ve Exit Control target’larına bağlıdır. Javac komutu sadece
UKLights.java kütüğünün bu target tarafından derlenebilmesi için değiştirilmiştir. Bir kütük
listesini kabul edebilen includes niteliği, UKLights.java kütüğünün derlenmesi için kullanılır.

dil
includes niteliğinin atılmasıyla, sadece javac komutu kullanılarak tüm sınıfların derlenmesi
sağlanabilir. AboutControl target eklenir.

<target name="AboutControl" depends="AboutPopup"


description="Builds AboutControl">
<echo>Doing AboutControl</echo>
<javac srcdir="${src}" destdir="${build}"
includes="AboutControl.java"/>
va
</target>

Bu, AboutControl.java kütüğünü derler ve AboutPopup target’ına bağlıdır. AboutPopup target


eklenir:

<target name="AboutPopup" description="Builds AboutPopup">


<echo>Doing AboutPopup</echo>
<javac srcdir="${src}" destdir="${build}"includes="AboutPopup.java"/>
ja

</target>

Bu, AboutPopup.java kütüğünü derler. ExitControl target eklenir:

<target name="ExitControl" description="Builds ExitControl">


w.

<echo>Doing ExitControl</echo>
<javac srcdir="${src}" destdir="${build}"
includes="ExitControl.java"/>
</target>

Bu, ExitControl.java kütüğünü derler. Diğer bir eklenmesi gereken target ise, Clean‘dir. Bu
target’ın amacı build dizininin içeriğini silmektir. Clean target eklenir:
ww

<target name="Clean" description="Removes previous build">


<delete verbose="true">
<fileset dir="${build}"/>
</delete>
</target>

13
ANT

m
Build dizininin içeriğinin silinmesi, dir niteliğiyle fileset tanımlanması ve dizinin dir’e değer
olarak verilmesi ile gerçekleşir. Dizinin kendisinin de silinmesi için includeEmptyDirs niteliğine
true değeri verilir. delete’in verbose niteliğine “true” değeri verilerek, Ant’ın silinen kütükleri
listelemesi sağlanır. Tamamlanan build.xml ve UKLights.java kütükleri saklanır.

o
Artık, proje sonlanmıştır, test aşamasına geçilebilir. Eski build kütüğünü kaldırmak için Clean
target çalıştırılır:

i.c
ant Clean

Aşağıdaki gibi bir çıktı elde edilir.

Buildfile: build.xml

Clean:

dil
[delete] Deleting 2 files from \blah\blah\build
[delete] Deleting \blah\blah\blah\build\UKLights.class[delete]

Deleting \blah\blah\blah\build\uklights.jpeg

BUILD SUCCESSFUL
Total time: 1 second
va
Varsayılan target olan all target’ının çalıştırılabilmesi için hiçbir argüman verilmeden komut
satırına, baz alınan dizinin altında ant yazılarak aşağıda görülen çıktı elde edilir:
ja

Buildfile: build.xml
AboutPopup:
[echo] Doing AboutPopup
[javac] Compiling 1 source file to \blah\blah\blah\build
AboutControl:
w.

[echo] Doing AboutControl


[javac] Compiling 1 source file to \blah\blah\blah\build
ExitControl:
[echo] Doing ExitControl
[javac] Compiling 1 source file to \blah\blah\blah\build

UKLights:
[echo] Doing UKLights
ww

[copy] Copying 1 file to \blah\blah\blah\build


[javac] Compiling 1 source file to \blah\blah\blah\build
all:
[echo] Doing all

BUILD SUCCESSFUL
Total time: 4 seconds

14
ANT

m
Dikkat edilirse; AboutPopup, AboutControl, ExitControl, UKLights ve all target’ları sırayla
çalıştırılmıştır. Bunun nedeni bağlı olunan target’ın önce çalıştırılmasının gerekmesidir. Sonuç
olarak, proje başarıyla sonlanmıştır.

o
KISALTMALAR

ANT Another Nice Tool

i.c
EJB Enterprise Java Bean
FTP File Transfert Protocol
JAR Java Archive
JAXP Java API For XML Processing
JDK Java Development Kit
JDOM Java Document Object Model
JUNIT Java Unit
VM
WAR
XML

KAYNAKLAR
Virtual Machine
Web Archive

dil
Extensible MarkUp Language
va
• http://jakarta.apache.org/ant/resources.html
Apache Ant Resource Homepage

• http://jakarta.apache.org/ant/manual/index.html
Apache Ant 1.5 Manual

• http://www.iseran.com/Java/ant/tutorial/ant_tutorial.html
ja

A beginners guide to Ant Steve Loughran 2001-04-30

• http://www.google.com
w.
ww

15

You might also like