Saya ingin menjalankan perintah dari buildfile Ant, untuk setiap file dalam direktori.
Saya mencari solusi yang tidak bergantung platform.
Bagaimana saya melakukan ini?
Tentu, saya bisa menulis skrip dalam beberapa bahasa skrip, tetapi ini akan menambah ketergantungan lebih lanjut ke proyek.
file-io
ant
build-process
build-automation
ivan_ivanovich_ivanoff
sumber
sumber
Gunakan tugas <apply> .
Ini mengeksekusi perintah sekali untuk setiap file. Tentukan file dengan menggunakan kumpulan file atau sumber daya lainnya. <apply> sudah ada di dalamnya; tidak perlu ketergantungan tambahan; tidak diperlukan implementasi tugas kustom.
Ini juga memungkinkan untuk menjalankan perintah hanya sekali, menambahkan semua file sebagai argumen sekaligus. Gunakan atribut paralel untuk mengalihkan perilaku.
Maaf sudah terlambat setahun.
sumber
Pendekatan tanpa ant-kontrib disarankan oleh Tassilo Horn ( target aslinya ada di sini )
Pada dasarnya, karena tidak ada ekstensi <java> (yet?) Dengan cara yang sama seperti <apply> memperluas <exec> , dia menyarankan untuk menggunakan <apply> (yang tentunya juga dapat menjalankan program java dalam baris perintah)
Berikut beberapa contohnya:
sumber
Berikut adalah cara untuk melakukannya menggunakan javascript dan tugas ant scriptdef, Anda tidak perlu ant-contrib agar kode ini berfungsi karena scriptdef adalah tugas inti semut.
sumber
project
direferensikan dalam contoh di atas, tetapi definisi sebelumnya tidak tersedia. Akan lebih baik jika hal itu diwakili atau diklarifikasi. EDIT: n / m, ditemukan ituproject
adalah var yang telah ditentukan untuk mengakses proyek saat ini. Aku sudah curiga, tapi tidak yakin.ant-kontrib itu jahat; tulis tugas semut khusus.
ant-contrib jahat karena mencoba mengubah semut dari gaya deklaratif menjadi gaya imperatif. Tapi xml membuat bahasa pemrograman omong kosong.
Sebaliknya, tugas semut khusus memungkinkan Anda menulis dalam bahasa nyata (Java), dengan IDE nyata, tempat Anda dapat menulis pengujian unit untuk memastikan Anda memiliki perilaku yang Anda inginkan, dan kemudian membuat deklarasi bersih dalam skrip build Anda tentang perilaku yang Anda inginkan.
Kata-kata kasar ini hanya penting jika Anda peduli tentang menulis skrip semut yang dapat dipelihara. Jika Anda tidak peduli tentang pemeliharaan dengan segala cara, lakukan apa pun yang berhasil. :)
Jtf
sumber
Saya tahu posting ini benar-benar tua tetapi sekarang setelah beberapa waktu dan versi semut berlalu, ada cara untuk melakukan ini dengan fitur dasar semut dan saya pikir saya harus membagikannya.
Ini dilakukan melalui macrodef rekursif yang memanggil tugas bertingkat (bahkan makro lain dapat dipanggil). Konvensi satu-satunya adalah menggunakan nama variabel tetap (elemen di sini).
Fitur utama dibutuhkan di mana:
Saya tidak berhasil membuat variabel pembatas, tetapi ini mungkin bukan kerugian besar.
sumber
Anda dapat menggunakan tugas ant-contrib "untuk" untuk mengulangi daftar file yang dipisahkan oleh pembatas apa pun, pembatas default adalah ",".
Berikut adalah file contoh yang menunjukkan ini:
sumber
Lakukan apa yang disarankan oleh blak3r dan tentukan classpath target Anda seperti itu
di mana lib adalah tempat Anda menyimpan toples Anda
sumber