Saya memiliki file konfigurasi dan berbagai dokumen yang ingin saya salin dari lingkungan dev ke direktori dev-server menggunakan Maven2. Anehnya, Maven tampaknya tidak kuat dalam tugas ini.
Beberapa opsi:
- Sederhana menggunakan tugas salin di Maven
<copy file="src/main/resources/config.properties" tofile="${project.server.config}/config.properties"/>
Gunakan plugin Ant untuk menjalankan salinan dari Ant.
Bangun sebuah artefak dari zip tipe , di samping artefak "utama" dari POM yang biasanya dari jenis jar , kemudian buka kemasan artefak itu dari repositori ke direktori target.
plugin maven-resources , seperti yang disebutkan di bawah ini.
Plugin Maven Assembly - tetapi ini tampaknya memerlukan banyak definisi manual, ketika saya ingin melakukan sesuatu secara sederhana dan "konvensional."
Halaman ini bahkan menunjukkan cara membuat plugin untuk menyalin!
plugin unggah , seperti yang disebutkan di bawah ini.
maven-dependency-plugin dengan copy , seperti yang disebutkan di bawah ini.
Semua ini tampaknya tidak perlu ad hoc: Maven seharusnya unggul dalam melakukan tugas-tugas standar ini tanpa repot dan repot.
Ada saran?
sumber
Jawaban:
Jangan menghindar dari plugin Antrun. Hanya karena beberapa orang cenderung berpikir bahwa Ant dan Maven berselisih, mereka tidak. Gunakan tugas salin jika Anda perlu melakukan kustomisasi satu kali yang tidak dapat dihindari:
Dalam menjawab pertanyaan ini, saya fokus pada detail dari apa yang Anda minta. Bagaimana cara menyalin file? Pertanyaan dan nama variabel membawa saya ke pertanyaan yang lebih besar seperti: "Apakah ada cara yang lebih baik untuk berurusan dengan penyediaan server?" Gunakan Maven sebagai sistem pembangunan untuk menghasilkan artefak yang dapat digunakan, kemudian lakukan penyesuaian ini baik dalam modul terpisah atau di tempat lain sama sekali. Jika Anda berbagi sedikit lebih banyak dari lingkungan build Anda, mungkin ada cara yang lebih baik - ada plugin untuk menyediakan sejumlah server. Bisakah Anda memasang perakitan yang dibongkar di root server? Server apa yang Anda gunakan?
Sekali lagi, saya yakin ada cara yang lebih baik.
sumber
task
parameternya sudah tidak digunakan lagi ( Plugin Antrun ). Anda sebaiknya menggunakantarget
(sejak 1.5). Sayangnya ada beberapa contoh yang mencampuradukkan ini; misalnyatarget
parameter danversion
<1,5.sumber
Untuk menyalin penggunaan file:
Untuk menyalin folder dengan sub-folder gunakan konfigurasi berikutnya:
sumber
<filtering>
untuk mencegah perubahan yang tidak diinginkan pada file skrip yang menggunakan${...}
variabel.Plugin dependensi pakar menyelamatkan saya dari banyak waktu dengan tugas semut:
The ketergantungan: copy adalah documentend, dan memiliki tujuan yang lebih berguna seperti membongkar.
sumber
Untuk tugas-tugas penyalinan yang sederhana, saya dapat merekomendasikan copy-rename-maven-plugin . Ini lurus ke depan dan mudah digunakan:
Jika Anda ingin menyalin lebih dari satu file, ganti
<sourceFile>...</destinationFile>
bagian itu denganSelain itu Anda dapat menentukan beberapa eksekusi dalam beberapa fase jika diperlukan, tujuan kedua adalah "ganti nama", yang hanya melakukan apa yang dikatakannya sementara sisa konfigurasi tetap sama. Untuk lebih banyak contoh penggunaan, rujuk ke Halaman Penggunaan .
Catatan : Plugin ini hanya dapat menyalin file, bukan direktori. (Terima kasih kepada @ james.garriss karena menemukan batasan ini.)
sumber
Solusi semut di atas paling mudah untuk dikonfigurasi, tetapi saya beruntung menggunakan plugin maven-upload-dari Atlassian. Saya tidak dapat menemukan dokumentasi yang bagus, berikut ini cara saya menggunakannya:
Variabel seperti "$ {jboss.host}" yang dirujuk di atas didefinisikan dalam ~ / .m2 / settings.xml saya dan diaktifkan menggunakan profil maven. Solusi ini tidak dibatasi untuk JBoss, ini hanya apa yang saya beri nama variabel saya. Saya memiliki profil untuk dev, test, dan live. Jadi untuk mengunggah telingaku ke contoh JBoss di lingkungan pengujian saya akan menjalankan:
Berikut ini cuplikan dari settings.xml:
Catatan: Repo maven Atlassian yang memiliki plugin ini ada di sini: https://maven.atlassian.com/public/
Saya sarankan mengunduh sumber dan melihat dokumentasi di dalamnya untuk melihat semua fitur yang disediakan plugin.
`
sumber
Nah, pakar seharusnya tidak baik dalam melakukan tugas-tugas granular yang baik, itu bukan bahasa scripting seperti bash atau semut, itu agak deklaratif - Anda mengatakan - saya perlu perang, atau telinga, dan Anda mendapatkannya. Namun jika Anda perlu menyesuaikan bagaimana perang atau telinga akan terlihat seperti di dalam, Anda punya masalah. Hanya saja tidak prosedural seperti semut, tetapi deklaratif. Ini memiliki beberapa pro di awal, dan bisa memiliki banyak kontra pada akhirnya.
Saya kira konsep awalnya adalah memiliki plugin yang bagus, "hanya berfungsi" tetapi kenyataannya berbeda jika Anda melakukan hal-hal yang tidak standar.
Namun, jika Anda cukup berupaya di pom Anda dan beberapa plugin khusus, Anda akan mendapatkan lingkungan build yang jauh lebih baik seperti semut misalnya (tergantung pada proyek Anda tentu saja, tetapi semakin dan semakin benar untuk proyek yang lebih besar).
sumber
Saya sudah memiliki pengalaman yang sangat baik dengan copy-maven-plugin . Ini memiliki sintaks yang jauh lebih mudah dan ringkas dibandingkan dengan maven-resources-plugin.
sumber
Cara umum untuk menyalin file sewenang-wenang adalah dengan memanfaatkan abstraksi transportasi Maven Wagon . Ia bisa menangani berbagai tujuan melalui protokol seperti
file
,HTTP
,FTP
,SCP
atauWebDAV
.Ada beberapa plugin yang menyediakan fasilitas untuk menyalin file melalui penggunaan
Wagon
. Yang paling menonjol adalah:Keluar dari kotak Plugin Maven Deploy yang
Ada
deploy-file
tujuannya. Itu cukup tidak fleksibel tetapi bisa menyelesaikan pekerjaan:Kerugian yang signifikan untuk digunakan
Maven Deploy Plugin
adalah bahwa ia dirancang untuk bekerja dengan repositori Maven. Ini mengasumsikan struktur dan metadata tertentu. Anda dapat melihat bahwa file tersebut ditempatkan di bawahfoo/bar/1.0/file-1.0.ext
dan file checksum dibuat. Tidak ada jalan lain untuk ini.Plugin Wagon Maven
Gunakan
upload-single
tujuannya :Penggunaan
Wagon Maven Plugin
untuk penyalinan sangat mudah dan tampaknya paling serbaguna.Dalam contoh di atas
<url>
dapat berupa protokol yang didukung. Lihat daftar Penyedia Gerobak yang ada . Sebagai contohfile:///copy/to
SSH
:scp://host:22/copy/to
Contoh di atas melewatkan parameter plugin di baris perintah. Atau, plugin dapat dikonfigurasi secara langsung di
POM
. Maka doa akan sepertimvn deploy:deploy-file@configured-execution-id
. Atau bisa juga terikat pada fase build tertentu.Harap perhatikan bahwa untuk protokol yang suka
SCP
bekerja, Anda perlu menentukan ekstensi diPOM
:Jika tujuan yang Anda salin membutuhkan otentikasi, kredensial dapat diberikan melalui
Server
pengaturan .repositoryId
/serverId
diteruskan ke plugin harus cocok dengan server yang ditentukan dalam pengaturan.sumber
Saya hanya dapat berasumsi bahwa properti $ {project.server.config} Anda adalah sesuatu yang ditentukan khusus dan berada di luar tata letak direktori standar.
Jika demikian, maka saya akan menggunakan tugas salin.
sumber
Cara lain adalah untuk menggabungkan hal-hal ini menjadi sebuah artefak menggunakan plugin assembly. Kemudian Anda dapat menggunakan plugin dependensi untuk membongkar file-file ini di tempat yang Anda inginkan. Ada juga salin tujuan dalam plugin dependensi untuk menyalin artefak.
sumber
Saya dapat mengumpulkan sejumlah sumber berbeda untuk jawaban ini:
Dari
~/.m2/settings.xml
:Kemudian jalankan perintah: (-X adalah untuk debug)
mvn -X upload:upload
sumber
Untuk merangkum beberapa jawaban bagus di atas: Maven dirancang untuk membangun modul dan menyalin hasilnya ke repositori Maven. Setiap penyalinan modul ke direktori input penyebaran / pemasang harus dilakukan di luar konteks fungsi inti Maven, misalnya dengan perintah salin Ant / Maven .
sumber