Saya sedang mengerjakan proyek Maven yang cukup besar. Kami mungkin memiliki sekitar 70 atau lebih artefak individu, yang secara kasar dibagi menjadi dua pustaka kode bersama dan mungkin sepuluh aplikasi yang menggunakannya. Semua item ini tinggal di namespace com.mycompany.*
.
Sebagian besar waktu kita berjalan melawan build snapshot. Jadi untuk melakukan pembangunan aplikasi secara penuh, saya mungkin membangun proyek perpustakaan terlebih dahulu sehingga mereka diinstal ke repositori lokal saya (seperti, katakanlah, mycompany-libname-2.4-SNAPSHOT.jar
).
Masalahnya adalah ketika saya kemudian pergi membangun aplikasi. Untuk beberapa alasan, Maven ingin memeriksa dua repositori publik utama (maven-net-repo dan java-net-repo) untuk pembaruan untuk semua mycompany-*-SNAPSHOT.jar
artefak. Tentu saja, mereka tidak ditemukan di sana, dan semuanya akhirnya kembali ke versi yang baru saja saya buat untuk repositori lokal saya, tetapi saya ingin Maven berhenti melakukan ini karena (a) itu membuat saya merasa seperti jaringan yang buruk. untuk terus-menerus memeriksa repositori ini untuk hal-hal yang tidak akan pernah ada, dan (b) menambahkan beberapa latensi jaringan yang tidak perlu dan mengganggu ke dalam proses pembangunan saya.
Saya telah mengambil menjalankan pakar dalam mode offline sebagian besar waktu untuk mengatasi ini, tapi itu tidak ideal karena kadang-kadang ketergantungan pada perpustakaan umum akan diperbarui. Jadi yang saya cari adalah solusi yang akan menyebabkan Maven tidak memeriksa pembaruan dari repositori yang diberikan untuk artefak yang memenuhi kriteria tertentu - dalam hal ini, saya akan senang jika Maven akan mengabaikan versi SNAPSHOT atau artefak yang ada di yang com.mycompany
namespace.
sumber
Juga, Anda dapat menggunakan
-o
atau--offline
di baris perintah mvn yang akan membuat pakar dalam "mode offline" sehingga tidak akan memeriksa pembaruan. Anda akan mendapatkan peringatan tentang tidak bisa mendapatkan dependensi yang belum ada di repo lokal Anda, tetapi bukan masalah besar.sumber
Sesuatu yang sekarang tersedia di pakar juga
atau singkatnya
sumber
set offline := true
di sesi, atauoffline := true
dibuild.sbt
.nsu
opsi ini rusak di v 3.0.3 (Lihat MNG-5064 ). Untuk menggunakan opsi ini dengan andal, Anda mungkin perlu memutakhirkan ke atleast v. 3.0.4 atau v. 3.0.5Pembaruan: Seharusnya saya mulai dengan ini karena proyek Anda SNAPSHOT. Ini adalah bagian dari semantik SNAPSHOT yang akan diperiksa oleh Maven untuk setiap pembaruan. Menjadi SNAPSHOT berarti mudah berubah dan dapat berubah sehingga pembaruan harus diperiksa. Namun perlu ditunjukkan bahwa Maven super POM mengkonfigurasikan central agar snapshots dinonaktifkan, jadi Maven seharusnya tidak pernah memeriksa pembaruan untuk SNAPSHOT di pusat kecuali Anda telah menimpanya di pom / pengaturan Anda sendiri.
Anda bisa mengonfigurasi Maven untuk menggunakan mirror untuk repositori pusat, ini akan mengarahkan ulang semua permintaan yang biasanya pergi ke pusat ke repositori internal Anda.
Di settings.xml Anda, Anda akan menambahkan sesuatu seperti ini untuk mengatur repositori internal Anda sebagai mirror untuk pusat:
Jika Anda menggunakan manajer repositori seperti Nexus untuk repositori internal Anda. Anda dapat mengatur repositori proxy untuk pusat proxy, jadi setiap permintaan yang biasanya pergi ke Central malah dikirim ke repositori proxy Anda (atau grup repositori yang berisi proxy), dan permintaan selanjutnya di-cache dalam manajer repositori internal. Anda bahkan dapat mengatur batas waktu cache proxy ke -1, sehingga tidak akan pernah meminta konten dari pusat yang sudah ada di repositori proxy.
Solusi yang lebih mendasar jika Anda hanya bekerja dengan repositori lokal adalah dengan mengatur updatePolicy untuk repositori pusat menjadi "tidak pernah", ini berarti Maven hanya akan pernah memeriksa artefak yang belum ada dalam repositori lokal. Ini kemudian dapat diganti pada baris perintah bila diperlukan dengan menggunakan -U untuk memaksa Maven memeriksa pembaruan.
Anda akan mengkonfigurasi repositori (di pom Anda atau profil di settings.xml) sebagai berikut:
sumber
updatePolicy
elemen berjalan di bawahsnapshots
ataureleases
elemen. Lihat: maven.apache.org/settings.htmlSangat sederhana :
Di induk Super POM Anda atau setting.xml, gunakan
Ini tips saya
sumber
Saya memiliki beberapa masalah yang mirip dengan ini,
Mengatur pembaruanPolicy ke "tidak pernah" tidak berhasil. Menghapus repo ini adalah cara saya menyelesaikannya. ps: Saya mengikuti tutorial ini tentang layanan web (btw, mungkin tutorial terbaik untuk ws untuk java)
sumber