Otomatiskan proses build Anda menggunakan Java dan Ant

Proses yang ditentukan adalah salah satu alat yang paling diperlukan tetapi paling sering digunakan dalam pengembangan perangkat lunak. Ini pada dasarnya adalah tugas overhead yang menyertai upaya pengembangan. Proses build yang ditentukan memastikan bahwa perangkat lunak dalam proyek pengembangan Anda dibuat dengan cara yang persis sama setiap kali build dijalankan. Saat proses build menjadi lebih kompleks - misalnya, dengan build EJB atau tugas tambahan - menjadi lebih diperlukan untuk mencapai standardisasi tersebut. Anda harus menetapkan, mendokumentasikan, dan mengotomatiskan rangkaian langkah yang tepat sebanyak mungkin.

Mengapa saya membutuhkan proses build yang ditentukan?

Proses build yang ditentukan adalah bagian penting dari setiap siklus pengembangan karena membantu menutup kesenjangan antara lingkungan pengembangan, integrasi, pengujian, dan produksi. Proses build saja akan mempercepat migrasi perangkat lunak dari satu lingkungan ke lingkungan lain. Ini juga menghilangkan banyak masalah yang berkaitan dengan kompilasi, jalur kelas, atau properti yang menghabiskan banyak waktu dan uang proyek.

Apa itu Ant?

Ant adalah fitur skrip tidak bergantung platform yang memungkinkan Anda membuat skrip build dengan cara yang hampir sama seperti fitur "make" di C atau C ++. Anda dapat menggunakan sejumlah besar tugas bawaan di Ant tanpa penyesuaian apa pun. Beberapa tugas terpenting diperlihatkan dalam tabel berikut tetapi dijelaskan lebih detail dalam contoh berikut.

Berikut adalah beberapa perintah berguna yang dibangun di distribusi Ant.

Perintah Deskripsi
Semut Digunakan untuk menjalankan proses semut lain dari dalam semut saat ini.
Copydir Digunakan untuk menyalin seluruh direktori.
Copyfile Digunakan untuk menyalin satu file.
Cvs Menangani paket / modul yang diambil dari repositori CVS.
Menghapus Menghapus satu file atau semua file dalam direktori tertentu dan sub-direktorinya.
Deltree Menghapus direktori dengan semua file dan subdirektorinya.
Exec Jalankan perintah sistem. Ketika atribut os ditentukan, maka perintah hanya dijalankan ketika Ant dijalankan pada salah satu sistem operasi yang ditentukan.
Dapatkan Mendapat file dari URL.
Botol Jars satu set file.
Jawa Menjalankan kelas Java dalam VM (Ant) yang sedang berjalan atau membagi VM lain jika ditentukan.
Javac Mengompilasi pohon sumber dalam VM (Ant) yang berjalan.
Javadoc / Javadoc2 Menghasilkan dokumentasi kode menggunakan alat javadoc.
Mkdir Membuat direktori.
Properti Menyetel properti (menurut nama dan nilai), atau kumpulan properti (dari file atau sumber daya) dalam proyek.
Rmic Menjalankan kompiler rmic untuk kelas tertentu.
Tstamp Setel properti DSTAMP, TSTAMP, dan TODAY di project saat ini.
Gaya Memproses sekumpulan dokumen melalui XSLT.

Sementara alat lain tersedia untuk melakukan pembuatan perangkat lunak, Ant mudah digunakan dan dapat dikuasai dalam beberapa menit. Selain itu, Ant memungkinkan Anda membuat fungsionalitas yang diperluas dengan memperluas beberapa kelasnya. Saya akan menunjukkan perluasan ini dalam contoh berikut.

Apa yang saya perlukan untuk menggunakan Ant?

Anda harus menginstal tiga komponen pada mesin Anda untuk menjalankan Ant: JDK, XML parser, dan Ant (lihat Sumberdaya untuk tautan).

Dalam banyak kasus, pengurai XML adalah bagian dari file lib yang didistribusikan dengan pelari Servlet atau Server Web. Jika tidak, pengurai XML gratis dari java.sun.com sudah cukup.

Instalasi Ant terdiri dari mengunduh file, menambahkan perpustakaan kelas ke jalur kelas, dan menambahkan biner Ant ke jalur.

Contoh skenario

Skenario contoh ini akan membantu menunjukkan kepada Anda nilai Semut dan memberikan wawasan tentang manfaatnya dan bagaimana Anda dapat menggunakannya.

Karena sebagian besar pengembangan Java saat ini difokuskan pada Java sisi server, saya telah memilih aplikasi sisi server sebagai contoh. Pengembang yang bekerja pada aplikasi Java sisi server biasanya tertarik pada kompilasi servlet, penyebaran file JSP, dan penyebaran file HTML, file konfigurasi, atau gambar.

Skema umum untuk melakukan build ini akan melibatkan pengembangan skrip kecil dalam bahasa khusus platform berdasarkan sistem operasi server. Misalnya, pengembang yang bekerja pada mesin NT bisa membuat file batch yang melakukan tugas kompilasi dan kemudian menjalankan penyebaran. Namun, jika lingkungan produksi memiliki Unix atau Linux, pengembang harus menulis ulang skrip, memastikan bahwa skrip tersebut sinkron.

Oke, tunjukkan cara kerjanya

Jadi, semoga saya meyakinkan Anda tentang perlunya menggunakan Ant dan menunjukkan betapa sederhananya menginstalnya. Sekarang saya akan menunjukkan kepada Anda betapa sederhananya Ant digunakan dengan menelusuri contoh yang melakukan kompilasi dan penerapan sederhana.

Proses build sederhana dengan Ant (simple.xml)


  

Ada banyak hal yang perlu dijelaskan dalam contoh di atas. Pertama, Anda harus memahami struktur file simple.xml. Ini adalah file XML berformat baik yang berisi entitas proyek yang terdiri dari beberapa entitas target.

Baris pertama berisi informasi tentang keseluruhan proyek yang akan dibangun.


  

Elemen terpenting dari garis proyek adalah defaultdan basedir.

The defaultatribut referensi target default yang akan dieksekusi. Karena Ant adalah alat pembuatan baris perintah, maka dimungkinkan untuk mengeksekusi hanya sebagian dari langkah-langkah target dalam file Ant. Misalnya, saya dapat melakukan perintah berikut:

% ant -buildfile simple.xml init 

Itu akan menjalankan antperintah dan menjalankan file simple.xml sampai inittarget tercapai. Jadi, dalam contoh ini, defaultnya adalah deploy. Proses Ant yang dipanggil di baris berikut akan dijalankan melalui simple.xmlfile hingga deployperintah tercapai:

% ant -buildfile simple.xml 

The basediratribut cukup jelas karena merupakan basis direktori dari mana referensi relatif terkandung dalam membangun file yang akan diambil. Setiap proyek hanya dapat memiliki satu basediratribut sehingga Anda dapat memilih untuk menyertakan lokasi direktori yang sepenuhnya memenuhi syarat atau memecah file proyek besar menjadi file proyek yang lebih kecil dengan basediratribut berbeda .

Garis minat berikutnya adalah garis sasaran. Dua versi berbeda ditampilkan di sini:


  

The targetelemen berisi empat atribut: name, if, unless, dan depends. Semut membutuhkan nameatribut tersebut, tetapi tiga atribut lainnya bersifat opsional.

Menggunakan depends, Anda bisa menumpuk tugas Ant sehingga tugas dependen tidak dimulai hingga tugas yang bergantung pada selesai. Dalam contoh di atas, tugas bersih tidak akan dimulai hingga inittugas selesai. The dependsatribut juga mungkin berisi daftar nilai dipisahkan koma menunjukkan beberapa tugas bahwa tugas dalam diskusi tergantung pada.

The ifdan unlessperintah membiarkan Anda menentukan perintah yang akan dilakukan baik jika properti tertentu diatur atau kecuali properti yang diatur. The ifakan dieksekusi ketika nilai properti ditetapkan, dan unlessakan dieksekusi jika nilainya tidak ditetapkan. Anda dapat menggunakan availableperintah untuk mengatur properti tersebut seperti yang ditunjukkan dalam contoh berikut, atau Anda dapat mengaturnya melalui baris perintah.

The initTarget dari contoh sederhana berisi empat baris propertyperintah seperti yang ditunjukkan di sini:


  

propertyBaris ini memungkinkan Anda menentukan direktori atau file yang umum digunakan. Properti adalah pasangan nilai nama sederhana yang memungkinkan Anda merujuk ke direktori atau file sebagai entitas logis daripada entitas fisik.

Jika Anda ingin referensi sourceDirvariabel kemudian dalam file Ant, Anda hanya bisa menggunakan sintaks berikut untuk peringatan Ant untuk mendapatkan nilai untuk tag ini: ${sourceDir}.

Dua perintah lain yang ada di buildfile di atas adalah:


  

Perintah-perintah ini digunakan untuk memastikan bahwa tidak ada file asing di outputDir(atau classesdirektori jika dirujuk seperti yang disebutkan di atas). Perintah pertama menghapus seluruh pohon yang ada di bawah file outputDir. Perintah kedua membuat direktori lagi.

Baris terakhir yang menarik perhatian pengembang adalah baris kompilasi berikut:


  

The javacperintah memerlukan direktori source (lokasi input dari file .java) dan direktori tujuan (lokasi output file .classes). Penting untuk dicatat bahwa semua direktori harus ada sebelum menjalankan antperintah atau dibuat menggunakan mkdirperintah. Ant tidak membuat direktori berdasarkan intuisi, jadi Anda harus membuatnya outputDir, menggunakan mkdirperintah sebelum langkah kompilasi di atas.

Setelah compiletugas selesai, deploytugas akan melakukan operasi penyalinan untuk memindahkan semua file JSP dari direktori sumber ke direktori penerapan. Dengan menggunakan copydirperintah, Anda menyalin seluruh direktori JSP dari satu lokasi ke lokasi lain. Saya menggunakan copyfileperintah untuk menyalin satu file properti sebagai bagian dari build.

Meskipun butuh beberapa baris untuk menjelaskan contoh tersebut, semestinya terbukti bahwa Ant adalah alat yang mudah digunakan. Menggunakan buildfile ini sebagai titik awal, Anda harus bisa memasukkan Ant ke dalam upaya pengembangan Anda. The antperintah ditampilkan dalam contoh di atas memiliki fungsi lebih lanjut, beberapa di antaranya akan dibahas dalam artikel ini, sisanya diserahkan kepada Anda bersama dengan referensi dokumentasi.

Tugas penting

Terserah Anda untuk membaca tugas-tugas bawaan yang disertakan dalam distribusi Ant. Lihat panduan pengguna di Sumber untuk informasi tentang setiap perintah. Saya telah memilih dua perintah yang umum digunakan sebagai contoh opsi tambahan yang tersedia untuk pengelola build tanpa penyesuaian apa pun.

Menyusun kode (termasuk EJB)

Dalam contoh sederhana yang dibahas sebelumnya, Anda melihat bentuk javacperintah sederhana. Sekarang, jika Anda memeriksanya secara lebih detail, Anda akan melihat bahwa Anda dapat menentukan tanda kompilasi seperti deprecation, debug, atau optimalkan serta file yang akan atau tidak akan disertakan dalam kompilasi.


  

Anda dapat menggunakan include/excludeentitas di dalam javactugas untuk menyertakan / mengecualikan file yang cocok dengan pola di nameatribut dari kompilasi. Dari contoh di atas, Anda ingin menyertakan file yang terdapat dalam direktori apa pun yang diakhiri dengan .java tetapi, pada saat yang sama, Anda ingin mengecualikan file bernama Script.java kecuali jika properti bsf.presentdisetel ke true.

Anda menyetel bsf.presentproperti menggunakan tugas berikut yang mencari jalur kelas untuk nama kelas yang ditentukan dan menyetel bsf.presentsesuai dengan hasil pencarian:


  

The javacPerintah tidak akan menyertakan file yang disebut version.txt dari kompilasi berdasarkan mengecualikan perintah di atas.

Menghasilkan javadoc

Tugas lain yang Ant dapat bantu otomatisasi adalah pembuatan javadoc. Anda dapat menggunakan perintah berikut untuk membuat javadoc:


  

Paket-paket tersebut menentukan keseluruhan paket yang akan disertakan oleh javadoc. The sourcepathAtribut menunjuk pada lokasi file sumber. The javadocperintah juga menyediakan atribut yang memungkinkan Anda untuk menentukan judul jendela dan dokumen. Anda juga dapat memasukkan pemberitahuan hak cipta di bagian bawah setiap halaman javadoc, menggunakan bottomatribut.

Bisakah Ant melakukan XYZ?

Pada tahap ini, Anda telah melihat beberapa kemungkinan tugas dalam proses build Anda yang dapat diotomatiskan oleh Ant. Tugas tersebut disertakan di luar kotak di Ant. Anda mungkin ingin menyesuaikan Ant untuk membantu Anda melakukan beberapa tugas yang lebih sulit seperti membangun EJB dan melakukan manajemen konfigurasi jarak jauh. Beberapa dari Anda mungkin ingin meningkatkan kapabilitas pelaporan Ant atau membuat antarmuka pengguna yang dapat menjalankan proses Ant.

Jawaban sederhana untuk pertanyaan "Can Ant do XYZ?" adalah "Ya, tetapi Anda mungkin harus menyesuaikannya."

Memperluas Semut

Dua ekstensi Semut menarik untuk dibahas pada saat ini. Mereka meningkatkan pelaporan dan kemampuan untuk mendistribusikan kode dari jarak jauh menggunakan Ant.

Pelaporan penyempurnaan