Apa itu Gudang Maven
Ketika kita tidak menggunakan Maven, misalnya, di masa lalu, kita biasa membangun proyek dengan semut, kita sering melihat subdirektori yang disebut /lib, yang menyimpan berbagai file jar dependensi pihak ketiga, seperti log4j.jar, junit.jar, dll.
Setiap kali Anda membangun proyek, Anda perlu membuat direktori /lib seperti itu dan kemudian menyalin sepasang file jar, yang merupakan duplikasi yang jelas. Ulangi selalu merupakan titik awal mimpi buruk. Beberapa proyek tidak berbagi file jar yang sama, yang tidak hanya akan menyebabkan pemborosan sumber daya disk, tetapi juga membuat manajemen konsistensi versi menjadi sulit.
Selain itu, jika Anda menggunakan alat manajemen versi seperti SVN (Anda tidak menggunakan alat manajemen versi? Coba SVN sekarang, ini dapat membantu Anda memecahkan banyak sakit kepala), Anda perlu mengirimkan sejumlah besar file JAR ke perpustakaan kode, tetapi alat manajemen versi tidak bagus dalam menangani file biner.
Repositori Maven adalah tempat semua file jar (perang, zip, pom, dll.) Ditempatkan. Semua proyek Maven dapat memperoleh toples ketergantungan yang mereka butuhkan dari repositori Maven yang sama, yang menghemat sumber daya disk. Selain itu, karena semua guci di repositori Maven memiliki koordinat sendiri, yang memberi tahu Maven ID grupnya, ID komponen, versi, metode pengemasan, dll., Proyek Maven dapat dengan mudah melakukan manajemen versi ketergantungan. Anda tidak diharuskan untuk mengirimkan file JAR ke repositori SCM, Anda dapat membuat repositori Maven tingkat organisasi untuk digunakan semua anggota.
Singkatnya, repositori Maven membantu kita mengelola artefak (terutama stoples).
Di Maven, output dari segala ketergantungan, plug-in, atau konstruksi proyek dapat disebut komponen.
Maven menyimpan semua komponen bersama dari semua proyek di lokasi terpadu. Lokasi terpadu ini disebut gudang. (Gudang adalah tempat dependensi dan plug-in disimpan)
Komponen apa pun memiliki koordinat yang unik. Maven mendefinisikan jalur penyimpanan unik komponen di gudang berdasarkan koordinat ini.
Menafsirkan jalur penyimpanan Maven di repositori:
1. Siapkan jalur berdasarkan GroupID, ubah pemisah periode menjadi pemisah jalur, yaitu, konversi "." ke "/" ; Contoh: org.testng ---> org/testng
2. Siapkan jalan berdasarkan artefactid dan hubungkan artefactid ke belakang: org/testng/testng
3. Gunakan versi untuk menyiapkan jalur dan menghubungkan versi ke bagian belakang: org/testng/testng/5.8
4. Connect Artifactid ke versi dengan tanda hubung pemisah ke belakang: org/testng/testng/5.8/tesng-5.8
5. Menilai jika komponen memiliki classifier, tambahkan tanda hubung pemisah setelah item 4 dan tambahkan classifier, org/testng/testng/5.8/tesng-5.8-jdk5
6. Periksa ekstensi komponen. Jika ekstensi ada, tambahkan pemisah periode dan ekstensi. Ekstensi ditentukan dengan mengemas, org/testng/testng/5.8/tesng-5.8-jdk5.jar
Pada titik ini, kami memahami detail penyimpanan komponen Maven.
Klasifikasi Gudang Maven:
Gudang Maven hanya memiliki dua kategori: 1. Gudang Lokal 2. Gudang Jarak Jauh, yang dibagi menjadi tiga jenis di gudang jarak jauh: 2.1 Central Warehouse 2.2 Server Pribadi 2.3 Gudang Publik Lainnya
1. Gudang lokal, seperti namanya, adalah tempat komponen Maven menyimpan secara lokal.
Catatan: Repositori lokal Maven tidak akan dibuat setelah Maven diinstal. Ini dibuat hanya ketika perintah Maven dieksekusi untuk pertama kalinya.
Lokasi default repositori lokal Maven: apakah itu Windows atau Linux, ada direktori .m2/ repositori/ repositori di direktori pengguna. Ini adalah lokasi default dari repositori Maven.
Cara Mengubah Lokasi Repositori Lokal Default Maven: Di sini kami ingin memperkenalkan elemen baru: LocalRepository, yang ada di Maven's Settings.xml File
1.1 Ubah repositori lokal yang mengonfigurasi seluruh pengguna: Pertama buat file settings.xml di /.m2/ direktori, lalu atur nilai elemen localrepository ke alamat repositori yang diinginkan di ~/.m2/settings.xml.
<Pengaturan> <CocalRepository> D:/maven_new_repository </localrepository> </settings>
Pada saat ini, alamat repositori lokal Maven menjadi d:/maven_new_repository. Catatan: Repositori lokal Maven yang dikonfigurasi saat ini milik ruang lingkup pengguna.
1.2 Ubah Konfigurasi Repositori Lokal Seluruh Global: Ubah Konfigurasi di M2_Home/Conf/Settings.xml, metode mengubah konfigurasi sama seperti di atas
Catatan: Setelah perubahan ini, semua pengguna akan terpengaruh, dan jika Maven ditingkatkan, semua konfigurasi akan dihapus, jadi Anda harus menyalin dan mencadangkan file M2_Home/conf/settings.xml terlebih dahulu.
Oleh karena itu: Dalam keadaan normal, konfigurasi pengaturan global.xml tidak disarankan.
2. Repositori Remote
2.1 Ketika datang ke gudang jarak jauh, mulailah dengan gudang pusat yang paling inti. Gudang pusat adalah gudang jarak jauh default. Ketika Maven diinstal, ia hadir dengan konfigurasi gudang pusat.
Dalam agregasi dan warisan Maven, kami telah mengatakan bahwa semua proyek Maven akan mewarisi super pom. Secara khusus, jika POM yang berisi konfigurasi berikut, kami menyebutnya super pom
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>http://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repository>
Gudang pusat berisi komponen Java open source yang paling populer, serta kode sumber, informasi penulis, SCM, informasi, informasi lisensi, dll. Secara umum, dependensi proyek Java sederhana dapat diunduh di sini
2.2 Server Pribadi
Private Server adalah gudang jarak jauh khusus. Ini adalah layanan gudang yang didirikan di LAN. Server pribadi mewakili gudang terpencil di WAN untuk pengguna Maven di LAN. Ketika Maven perlu mengunduh komponen, ia meminta dari server pribadi. Jika komponen tidak ada di server pribadi, itu akan mengunduh dari repositori jarak jauh eksternal, cache di server pribadi, dan kemudian menyediakan layanan untuk permintaan pengunduhan Maven. Kami juga dapat mengunggah beberapa komponen yang tidak dapat diunduh dari gudang eksternal ke server pribadi.
Fitur Server Privat Maven:
1. Simpan bandwidth jaringan eksternal Anda sendiri: Kurangi konsumsi bandwidth jaringan eksternal yang disebabkan oleh permintaan berulang
2. Akselerasi komponen Maven: Jika proyek dikonfigurasi dengan banyak gudang jarak jauh eksternal, kecepatan konstruksi akan sangat berkurang.
3. Menyebarkan komponen pihak ketiga: Ketika beberapa komponen tidak dapat diperoleh dari gudang eksternal, kami dapat menggunakan komponen ini ke gudang internal (server pribadi) untuk digunakan oleh proyek Maven internal.
4. Meningkatkan stabilitas dan meningkatkan kontrol: Ketika internet tidak stabil, konstruksi Maven juga akan menjadi tidak stabil. Beberapa perangkat lunak server pribadi juga menyediakan fungsi lain.
5. Kurangi beban gudang pusat: Jumlah permintaan gudang pusat Maven sangat besar, dan mengkonfigurasi server pribadi juga dapat sangat mengurangi tekanan gudang pusat.
Server Privat Maven Mainstream saat ini:
1.Arsipe's Archiva
2.Tifactory JFrog
3. Nexus Sonatype
3. Konfigurasi Gudang Jarak Jauh
Mengkonfigurasi Repositori Remote akan memperkenalkan elemen konfigurasi baru: <Repositories> <Repository>
Di bawah elemen <Repositories>, Anda dapat menggunakan elemen <Repository> anak untuk mendeklarasikan satu atau lebih repositori jarak jauh.
contoh:
<Repository> <d> jboss </dent> <name> jboss repository </name> <ubl> http://repository.jboss.com/maven2/ </rrtp <CeckSumpolicy> Peringatkan </scnipsumpolicy> <!-Gagal, abaikan-> </seleases> <snapshots> <denabled> false </aktifed> </snapshots> <wrayout> Default </wapteout> </repository> </repository> </repositori>
Elemen <dendatePolicy>: mewakili frekuensi pembaruan, nilainya adalah: tidak pernah, selalu, interval, setiap hari, setiap hari adalah nilai default
Elemen <Cecksumpolicy>: mewakili kebijakan Maven untuk memeriksa dan memverifikasi file. Peringatan adalah nilai default untuk alasan keamanan. Terkadang kita perlu mengotentikasi akses gudang jarak jauh. Secara umum, informasi otentikasi dikonfigurasi dalam settings.xml:
<servers> <server> <d> sama dengan id repositori di pom </d> <username> nama pengguna </username> <wrastand> pwd </swasword> </ver server> </server>
Catatan: ID di sini harus konsisten dengan ID elemen repositori yang perlu diautentikasi dalam POM.
Cara menggunakan proyek yang dihasilkan ke repositori jarak jauh
Untuk menyelesaikan pekerjaan ini, Anda juga perlu mengonfigurasinya di POM. Berikut adalah elemen baru: <DistributionManagement>
Manajemen distribusi berisi 2 elemen anak: repositori dan snapshotrepository. Yang pertama mewakili repositori untuk menerbitkan komponen versi, dan yang terakhir mewakili repositori untuk versi snapshot.
Kedua elemen perlu mengonfigurasi ID (pengidentifikasi unik dari repositori jarak jauh), nama, url (mewakili alamat repositori)
Menyebarkan komponen ke gudang jarak jauh membutuhkan otentikasi. Konfigurasinya sama seperti di atas
Jalankan setelah konfigurasi benar: MVN Clean Deploy
Lihatlah snapshot dengan benar
Sebelumnya, ketika mengkonfigurasi POM, kami sangat berhati -hati tentang konfigurasi snapshot, atau jarang menggunakan versi snapshot. Alasannya adalah masih sangat tidak stabil dan sangat mudah untuk menyebabkan kesalahan yang tidak diketahui pada sistem kami, membuat sulit bagi kami untuk menemukan. Bahkan, versi snapshot tidak berguna. Tujuan terbesar dari snapshot adalah untuk digunakan dalam proses pengembangan, terutama ketika ada dependensi modul. Misalnya, A dan B dikembangkan secara bersamaan. A bergantung pada B. Selama proses pengembangan, A dan B adalah pengembangan yang terus -menerus terintegrasi, terus -menerus memodifikasi file POM dan membangun proyek. Pada saat ini, sinkronisasi versi menjadi masalah besar. Ini dapat dicapai dengan menggunakan snapshot.
Bahkan, selama rilis versi snapshot, Maven akan secara otomatis menandai komponen dengan cap waktu saat ini. Dengan cap waktu ini, kita dapat menemukan versi snapshot terbaru kapan saja, yang akan menyelesaikan masalah pengembangan kolaboratif yang baru saja disebutkan.
Adapun bagaimana memeriksa pembaruan B, saya baru saja mengatakan ketika berbicara tentang konfigurasi bahwa ada elemen dalam konfigurasi snapshot yang dapat mengontrol frekuensi memeriksa pembaruan -------- updatePolicy
Kami juga dapat menggunakan baris perintah untuk menambahkan parameter untuk memaksa Maven untuk memeriksa pembaruan: mvn clean install-U
Bagaimana tepatnya komponen Maven Parse dari gudang? ---- Mekanisme Maven untuk parsing dependensi dari repositori
1. Ketika ruang lingkup ketergantungan adalah sistem, Maven secara langsung menyelesaikan komponen dari sistem file lokal.
2. Setelah menghitung jalur gudang berdasarkan koordinat ketergantungan, cobalah untuk menemukan komponen langsung dari gudang lokal. Jika komponen yang sesuai ditemukan, resolusi akan berhasil.
3. Dalam kasus di mana tidak ada komponen yang sesuai dalam repositori lokal, jika versi dependen adalah komponen versi rilis yang ditampilkan, ia berulang kali melalui semua repositori jarak jauh dan mengunduhnya setelah ditemukan.
4. Jika versi dependen dirilis atau terbaru, metadata semua repositori jarak jauh dibaca berdasarkan kebijakan pembaruan, gabungkan metadata yang sesuai dari repositori lokal, hitung nilai sebenarnya dari rilis atau terbaru, dan kemudian periksa repositori lokal berdasarkan nilai sebenarnya ini.
5. Jika versi dependennya adalah snapshot, metadata dari semua repositori jarak jauh dibaca berdasarkan kebijakan pembaruan, gabungkan dengan metadata yang sesuai dari repositori lokal, dan dapatkan nilai versi snapshot terbaru, dan kemudian periksa repositori lokal berdasarkan nilai atau unduh dari repositori jauh.
6. Jika versi artefak parsed terakhir adalah snapshot dari format cap waktu, salin file dalam format cap waktu ke format non-timetamp dan gunakan artefak dalam format non-timetamp ini.
CATATAN: Pastikan untuk mengingat <lelase> <Enabled> & <snapshot> <denabled>, hal yang sama berlaku untuk snapshot
Terbaru & rilis tidak disarankan saat mendeklarasikan POM. Konfigurasi terbaru & rilis dalam plug-in tidak lagi didukung di Maven3. Jika versi plug-in tidak diatur, versi final sama dengan rilis.
Maven hanya akan menguraikan rilis terbaru.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.