Kami sedang membuat aplikasi web dengan AngularJS dan kami menyukai ide menggunakan Bower untuk Manajemen Ketergantungan dan Grunt untuk membangun, menjalankan tes, dll. ( Yeoman )
Server dilakukan dengan Java menggunakan Maven, jadi tentu saja kami ingin dengan sederhana mvn install
membangun semuanya (aplikasi web + server)
Jadi pendekatan apa yang Anda ambil dan mengapa?
1) Perlakukan mereka sebagai dua aplikasi berbeda, yang sebenarnya memang demikian. Jadi menggunakan metode / alat bangunan yang berbeda dapat diterima.
2) Lupakan tentang Grunt Bower, gunakan plugin Maven untuk membangun, menjalankan pengujian, mengelola dependensi untuk aplikasi web. Jika demikian, yang mana?
3) Gunakan plugin Maven exec untuk memanggil Grunt untuk membuat aplikasi web front-end. Saya melihat ini lebih sebagai peretasan daripada solusi.
4) Lainnya.
Pendekatan yang lebih mudah diintegrasikan dengan Jenkins merupakan nilai tambah.
Terima kasih sebelumnya!
Jawaban:
Setelah bekerja dengan tentang setiap alat pipeline aset di toolkit Java untuk sementara waktu, saya sampai pada beberapa kesimpulan:
Perkakas Berbasis Java
Ada beberapa alat di luar sana tetapi yang paling populer adalah JAWR dan Wro4J. Masalah terbesar dengan keduanya adalah bahwa mereka sebagian besar berbasis Rhino (WRO4J sekarang memiliki beberapa dukungan Node) dan Rhino adalah anjing yang lambat dibandingkan dengan alat berbasis Node. Anda juga harus mempertimbangkan bahwa perkakas JavaScript berkembang pesat sehingga Anda harus mencari alat yang dapat bergerak dengan cepat.
WRO4J - Dukungannya luar biasa, integrasi Maven DAN Eclipse sangat bagus, daftar plugin sangat luas dan kerangka kerjanya cukup fleksibel sehingga dengan sedikit minyak siku Anda dapat menulis plugin untuk apa pun yang Anda butuhkan. Jika Anda terbatas pada pipa aset berbasis Java, ini pasti cara yang tepat. Masalah dengan Wro4j adalah lambat (bahkan ketika ia memulai proses Node) relatif terhadap alat berbasis Node.
Untuk memberikan beberapa nomor dunia nyata yang mengumpulkan dan menggabungkan 25 bundel aset yang berisi LESS, CSS CoffeeScript dan JavaScript membutuhkan waktu sekitar ~ 35 detik saat menggunakan Rhino dan ~ 15 detik menggunakan dukungan Node Wro4j pada iMac 2013 dengan RAM 16G. Menggunakan Grunt + Node membutuhkan waktu sekitar 2 detik pada MacBook Air saya yang kecil.
JAWR - Integrasi dan daftar fitur cukup bagus tetapi dokumennya tidak bagus dan menulis plugin Anda sendiri bisa sedikit rumit. Ketika saya pertama kali menulis posting ini JAWR berada di tengah-tengah 4 tahun absen tetapi sekarang kembali dalam pengembangan aktif pada Jan 2014. Jika Anda memilih untuk menyelidiki Java Tools, ini patut diselidiki.
Perkakas Berbasis Node (terintegrasi dengan Ant / Maven Builds)
Grunt - Mudah, memiliki ekosistem plugin yang fantastis, dan komunitasnya sangat besar. Jika ada sesuatu yang perlu Anda lakukan, Anda bisa bertaruh ada plugin untuk itu - bahkan mungkin yang ditulis oleh pencipta grunt. Kritik utama dari Grunt adalah bahwa ia didorong oleh konfigurasi yang membuat pengaturan menjadi sangat mudah tetapi bukan "Cara Node." Perlu juga disebutkan bahwa tugas Grunt tidak mudah disusun sehingga untuk pipeline build JavaScript yang rumit, Grunt mungkin tidak ideal.
Gulp - Gulp adalah alternatif yang berkembang pesat untuk Grunt. Ini bersamaan secara default dan menggunakan aliran untuk menghindari penulisan sementara ke sistem file yang dapat sangat mempercepat pembangunan Anda. Gulp sangat idiomatis dan memiliki penekanan pada kode> konfigurasi dan meskipun ini memberi Anda banyak kekuatan, itu tidak ideal untuk tim yang tidak memiliki kompetensi inti dalam JavaScript.
Satu-satunya kemungkinan menutup telepon untuk perkakas berbasis JavaScript adalah Anda harus memiliki Node , npm dan grunt-cli / gulp pada mesin apa pun yang perlu melakukan kompilasi. Jika Anda tidak memiliki akses ke mesin CI Anda atau tidak menggunakan penerapan berbasis artefak, ini mungkin sulit dijual.
Mengintegrasikan ini ke dalam proyek Maven Anda cukup mudah dan Anda memiliki beberapa opsi. Anda dapat menggunakan plugin ant-run Maven , Anda dapat menjalankan tugas ant exec dan memanggilnya dari Maven atau yang terbaik dari semuanya, Anda dapat menggunakan tugas maven exec .
Di bawah ini adalah kode untuk mengintegrasikan ini ke dalam siklus hidup Maven menggunakan plugin exec jika ini berguna bagi siapa saja.
sumber
Maven
build jikagrunt
build gagal?Bagi siapa pun yang masih mencari informasi lebih lanjut tentang topik ini, salah satu pencipta Yeoman memiliki artikel bagus (ditulis beberapa bulan setelah pertanyaan ini awalnya diajukan) yang memperluas jawaban asli dengan sedikit lebih detail:
sumber
Lalu ada juga frontend-maven-plugin: https://stackoverflow.com/a/19600777/320399 Ini mengunduh Node dan NPM untuk Anda (secara lokal ke proyek Anda), mengunduh Grunt melalui NPM itu (dijalankan oleh Node itu) dan kemudian menjalankan Grunt (melalui Node itu). Ini self-bootstrap, dan Anda tidak perlu Node diinstal pada mesin untuk membangun proyek. Hanya satu perintah; mvn install.
sumber
Anda mungkin ingin memeriksa http://jhipster.github.io/ : ini adalah generator Yeoman, yang menghasilkan aplikasi yang memiliki Maven, Grunt, dan Bower yang semuanya bekerja sama.
Ini agak seperti opsi ketiga Anda, tetapi semuanya dikonfigurasi untuk Anda, yang tidak semudah itu. Ini juga menghasilkan layanan AngularJS dan Java REST dasar untuk Anda.
sumber
setelah beberapa jam dihabiskan untuk mengatasi masalah ini, saya dapat mengatakan ini:
maven dan grunt tidak bermain bagus, tapi bisa dipaksakan ..
Berikut adalah deskripsi plugin untuk menjalankan Grunt via Maven build
saya harap ini membantu :)
sumber