Pemrograman Java dengan Apache Ant

Tulisan kali ini akan membahas tentang penggunaan Apache Ant dalam pemrograman java. Apache Ant merupakan tool yang fungsi utamanya adalah untuk mengotomatiskan proses dalam pembuatan program java. Tool ini akan bermanfaat jika kita terpaksa harus membuat program dalam sistem operasi yang tidak memiliki antarmuka grafis (GUI) atau tidak ingin menggunakan aplikasi IDE (NetBeans, Eclipse, dan sejenisnya).

Instalasi dan Konfigurasi

Apache Ant bisa di-download dari alamat url http://ant.apache.org/bindownload.cgi, dan disediakan dalam format berkas .zip dan .tar.gz. Download format berkas yang bisa anda gunakan kemudian ekstrak di direktori yang anda inginkan.

Untuk bisa menggunakan Apache Ant, kita perlu membuat variabel sistem dengan nama %ANT_HOME% dan menambahkan folder bin dari direktori Apache Ant kedalam variabel %PATH%. Perhatikan langkah-langkah berikut :

Diasumsikan kita mengestrak berkas yang sudah didownload sebelumnya pada direktori C:\Program Files\, maka nilai variabel %ANT_HOME% adalah C:\Program Files\apache-ant-1.10.1 (versi yang saya gunakan adalah 1.10.1).

Dalam direktori Apache Ant terdapat folder dengan nama bin yang berisi file-file yang bisa dieksekusi. Nilai yang akan kita tambahkan ke dalam variabel %PATH% adalah C:\Program Files\apache-ant-1.10.1\bin.

Direktori Apache Ant

Variabel sistem dapat disetting melalui Control PanelSystem and SecuritySystemAdvanced System Settings ⇒ Pada jendela System Properties klik tombol Environment Variables. Untuk menambah variabel baru klik tombol New dan untuk memodifikasi variabel yang sudah ada klik tombol Edit. Hasil akhir dari konfigurasi adalah sebagai berikut :

Variabel ANT_HOME

Variabel PATH

Kita bisa menguji hasil konfigurasi melalui aplikasi Command Prompt dengan mengetikkan perintah ant, seperti berikut :

Command Prompt

Menggunakan Apache Ant

Apache Ant menggunakan sebuah file XML dengan nama build.xml. File build.xml berisi sebuah project dan sebuah project menampung paling sedikit satu buah target. Target akan menampung satu atau lebih elemen perintah yang harus dikerjakan.

Contoh sederhana dari file build.xml adalah sebagai berikut :

<?xml version="1.0"?>
<project name="HelloWorldGUI" basedir="." default="init">   <!-- project  -->
  <target name="init">                                      <!-- target   -->
    <mkdir dir="classes"/>                                  <!-- task 1   -->
    <mkdir dir="dist"/>                                     <!-- task 2   -->
  </target>
</project>

Penjelasan :

  • Elemen project terdiri atas beberapa atribut, yaitu :
    • name merupakan nama dari project
    • basedir mengindikasikan direktori dari project. simbol titik ( . ) mengindikasikan project berada di direktori saat ini (current directory)
    • default berisi nama dari target yang akan dieksekusi secara default.
  • Elemen target menggunakan satu buah atribut name yaitu nama dari target tersebut.
  • Elemen target terdiri atas 2 buah perintah (task) mkdir yang digunakan untuk membuat folder. Daftar lengkap dari task dapat dilihat pada halaman manual yang disediakan.

Eksekusi dua atau lebih target secara berurutan dapat dilakukan dengan memanfaatkan atribut depends. Perhatikan contoh berikut :

<target name="A"></target>
<target name="B" depends="A"></target>

Pada contoh diatas, target B bergantung (depends) kepada target A. Tiap kali kita memanggil target B, Apache Ant akan mengerjakan task pada target A baru kemudian mengerjakan task pada target B.

Contoh Program

Dalam contoh ini kita akan membuat sebuah program java menggunakan Apache Ant. Kita tentukan direktori project yaitu C:\HelloWorldGUI. Dalam direktori tersebut, kita membuat sebuah folder baru dengan nama src yang nantinya akan menampung kode program java. Selain itu kita juga membuat file build.xml seperti berikut :

<?xml version="1.0"?>
<project name="HelloWorldGUI" basedir="." default="build">

  <target name="clean">
    <delete dir="classes"/>
    <delete dir="dist"/>
  </target>

  <target name="init">
    <mkdir dir="classes"/>
    <mkdir dir="dist"/>
  </target>

  <target name="build" depends="clean,init">
    <javac includeAntRuntime="false" srcdir="src" destdir="classes"/>
  </target>

  <target name="test" depends="build">
    <java classpath="classes" classname="com.sad301.Main" fork="true" spawn="true"/>
  </target>

  <target name="dist" depends="build">
    <jar destfile="dist/HelloWorldGUI.jar" basedir="classes"/>
  </target>

</project>

Sampai disini kita bisa lanjutkan ke penulisan kode program. Ketikkan kode berikut kemudian simpan pada folder src dengan nama Main.java.

package com.sad301;

import javax.swing.*;

public class Main extends JFrame {

  public Main() {
    setTitle("Hello World GUI");
    setSize(400, 400);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> {
      (new Main()).setVisible(true);
    });
  }

}

Berdasarkan file build.xml diatas, kita memiliki 5 pilihan target yaitu :

  1. clean ⇒ target ini akan menghapus folder classes dan dist
  2. init ⇒ target ini akan membuat folder dengan nama classes dan dist
  3. build ⇒ target ini akan meng-compile kode program yang tersimpan di folder src dan menyimpan file .class hasil kompilasi di folder classes. Target ini juga akan mengerjakan clean dan init
  4. test ⇒ target ini menjalankan program java yang tersimpan di folder classes. Target ini juga akan mengerjakan build
  5. dist ⇒ target ini mengepak file-file .class menjadi file .jar didalam folder dist. Target ini juga akan mengerjakan build

Jalankan kembali aplikasi command prompt, kemudian pindah ke direktori C:\HelloWorldGUI. Pada direktori tersebut kita bisa eksekusi Apache Ant dengan menyebutkan salah satu dari 5 target diatas, sebagai contoh :

ant dist

Output dari perintah diatas adalah sebagai berikut :

Command Prompt 2

Parsing XML Dengan Java

Pada postingan kali ini, saya akan menuliskan sedikit tentang salah satu teknik parsing XML dengan menggunakan bahasa pemrograman java. Saya tidak akan menjelaskan secara mendetail tentang apa itu XML, selengkapnya bisa anda baca melalui website-website berikut :

Parsing sendiri adalah sebuah istilah yang merujuk kepada proses ekstraksi data/informasi dari sebuah struktur dokumen.

Sederhananya, proses parsing XML dilakukan dengan mentransformasikan file XML menjadi Document Object Model (DOM). Dari DOM tersebut kita dapat melakukan penelusuran (traverse) di tiap-tiap node hingga menemukan data yang diinginkan.

Sebagai contoh, semisal kita memiliki file XML dengan struktur berikut :

<?xml version="1.0" encoding="UTF-8"?>
<daftar-kontak>
  <kontak id="1">
    <nama>Ahmad</nama>
    <alamat>Kendari</alamat>
    <phone>12345</phone>
  </kontak>
  <kontak id="2">
    <nama>Budi</nama>
    <alamat>Makassar</alamat>
    <phone>90876</phone>
  </kontak>
  <kontak id="3">
    <nama>Dharmawan</nama>
    <alamat>Surabaya</alamat>
    <phone>213423</phone>
  </kontak>
</daftar-kontak>

Untuk mengambil data dari file tersebut, saya menggunakan kode java seperti dibawah ini :

package com.sad301.exc;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class XMLParsing {

  public static void main(String[] args) {
    new XMLParsing();
  }

  public XMLParsing() {
    try {
      tryParse();
    }
    catch(Exception exc) {
      exc.printStackTrace();
    }
  }

  private void tryParse() throws Exception {
    File file = new File("daftar-kontak.xml");
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document d = db.parse(file);
    // ambil root node dari DOM
    Element elRoot = d.getDocumentElement();
    // ambil child node dari root dengan tag <kontak>
    NodeList nlKontak = elRoot.getElementsByTagName("kontak");
    // loop disemua child node
    for(int i=0; i<nlKontak.getLength(); i++) {
      Element elKontak = (Element)nlKontak.item(i);
      NodeList nlNama = elKontak.getElementsByTagName("nama");
      NodeList nlAlamat = elKontak.getElementsByTagName("alamat");
      NodeList nlPhone = elKontak.getElementsByTagName("phone");
      String id = elKontak.getAttribute("id");
      String nama = nlNama.item(0).getTextContent();
      String alamat = nlAlamat.item(0).getTextContent();
      String phone = nlPhone.item(0).getTextContent();
      String str = id + ":" + nama + ":" + alamat + ":" + phone;
      System.out.println(str);
    }
  }

}

Dan hasilnya adalah sebagai berikut :

sample

Referensi