Apache Ant – 6) Proje derlemek

Şimdiye kadar Ant içinde kullanabileceğimiz birçok veri yapısı ve işler öğrendik, şimdi ise bu bilgiyi aksiyona dökme zamanı geldi. Bu bölümde bir proje yapılandıracağız. Bu bölümün ana amacı .java dosyalarının derlenmesi ve WEB-INF\classes klasörü altına atılmasıdır.

Proje klasör çatımızı aşağıda belirttiğimiz gibi oluşturacağız.

  • Veritabanı ile alakalı olan kodlarımızı db klasöründe,
  • Java kaynak kodlarımızı src klasöründe,
  • Resimler, Javascript dosyaları, css dosyalarımızı war klasöründe,
  • JSP dosyalarımızı jsp klasöründe,
  • Üçüncü parti kütüphane dosyalarımızı lib klasöründe,
  • Java derlenmiş (.class) dısyalarımızı WEB-INF\classes klasöründe tutacağız.
<?xml version="1.0"?>
<project name="proje" basedir="." default="derle">
   <property name="kaynak.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="derle.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="isim" value="proje"/>
   <path id="temel-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path> 

   <target name="derle" description="java dosyalarını derle">
      <mkdir dir="${derle.dir}"/>
      <javac destdir="${derle.dir}" source="1.5" target="1.5">
         <src path="${kaynak.dir}"/>
         <classpath refid="temel-classpath"/>
      </javac>
   </target>

   <target name="temizle" description="Hedef klasörü temizle">
      <delete>
         <fileset dir="${derle.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

İlk olarak ileride aynı şeyleri tekrar tekrar yazmamak için değişkenlerimizi tanımlıyoruz.

   <property name="kaynak.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="derle.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="isim" value="proje"/>

Burada;

  • kaynak.dir projenin java kaynak dosyalarının bulunacağı klasörü gösteriyor
  • web.dir ise projeye ait jsp, css ve js dosyalarının bulunacağı klasörü gösteriyor.
  • derle.dir derleme işlemi yapıldıktan sonra üretilen dosyaların yerleştirileceği klasörü gösteriyor.

Özellikler diğer özellikleri gösterebilir veya farklı bir söylemle kendi içinde kullanabilir. Yukarıdaki örnekde görüleceği üzere derle.dir değeri için web.dir özelliğini kullanmaktadır.

Bu örneğimizde kaynak.dir bizim projemizin kodlarının bulunduğu kaynağı gösterir.

Öntanımlı (default) hedef (target) ise derle isimli hedefimizdir. Buna ek olarak temizle adında da bir hedefimiz bulunmaktatır. Şimdi temizle hedefimizi inceleyelim.

 <target name="temizle" description="Hedef klasörü temizle">
      <delete>
         <fileset dir="${derle.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>

Burada gördüğümüz üzere temizle hedefi isminden de anlaşılacağı üzere bizim hedef klasörü olarak belirlediğimiz klasörün içeriğini temizlemek için kullanılıyor/kullanılacatır.

temel-classpath dediğimiz özelliğimiz ise bizim projemiz için gerekli classpath bilgisini belirlemektedir. Bu örneğimizde classpath içine koyacağımız sınıflarımız için iki farklı yapı kullanılmaktadır. Birincisi .jar dosyalarını kullanmak için bir fileset veri yapısı kullanılmıştır. Bu fileset içinde belirtilen jar dosyalarımız lib klasörümüz altında bulunmaktadır. İkincisi  olan .class dosyalarımız için ise derle hedefimizde bulunan, yani kodumuzdan üretilmiş olan .class dosyalarımız olacaktır.

<path id="temel-classpath">
   <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path>

Son olarak derle hedefimiz bulunuyor. Kodumuza baktığımız zaman, ilk olarak eğer derleme klasörümüz halihazırda bulunmuyorsa bu klasörü oluşturduğumuzu görüyoruz. Sonra JDK tarafından sağlanan ve java kodlarını derlemeye yarayan javac komutunu tetikliyoruz. Javac komutu tetiklenirken derleme esnasında kullanılması için classpath, hangi klasör altındaki dosyaların derleneceği, derleme sonucu çıkan dosyaların nereye konumlandırılacağı gibi bilgileri de veriyoruz.

<target name="derle" description="java dosyalarını derle">
      <mkdir dir="${derle.dir}"/>
      <javac destdir="${derle.dir}" source="1.5" target="1.5">
         <src path="${kaynak.dir}"/>
         <classpath refid="temel-classpath"/>
      </javac>
   </target>

Son olarak ant komutu kullanarak işlemimizi yaptığımızda yeni oluşmuş yapımızı görebiliriz.