Kadang-kadang maven mengeluh bahwa ketergantungan tertentu, yang dibangun dan dipaketkan secara lokal, tidak dapat ditemukan di repositori lokal saat membangun proyek lain yang memilikinya sebagai ketergantungan. Kami mendapatkan kesalahan seperti:
Gagal menjalankan tujuan pada proyek X: Tidak dapat menyelesaikan ketergantungan untuk proyek X: Kegagalan menemukan Y di [gudang archiva] telah di-cache di repositori lokal, resolusi tidak akan dicoba lagi hingga interval pembaruan internal telah berlalu atau pembaruan dipaksakan - >
Di mana X adalah proyek yang sedang dibangun, dan Y adalah artefak yang seharusnya hilang. Jika Anda melihat di repositori lokal, artefaknya ada di sana. Artefak ini tidak pernah diinstal di repositori archiva kami, jadi masalahnya hanya berbasis di repositori lokal.
Kami telah mencoba berbagai profil di settings.xml, dan tentu saja "mvn -U". Tidak ada gunanya, juga tidak seharusnya karena artefak ini tidak pernah melangkah lebih jauh dari repositori lokal.
Hanya dua hal yang tampaknya berhasil adalah menunggu dalam waktu yang sangat lama sampai maven cerdas, atau untuk menghapus repositori lokal sepenuhnya. Agaknya opsi menunggu terkait dengan interval pembaruan yang disebutkan di atas.
Kami telah mengalami masalah ini dengan maven 3.0.2 dan 3.0.3. Kami menggunakan Archiva 1.0.3 (tetapi sekali lagi ini seharusnya tidak menjadi faktor). Bantuan apa pun akan sangat dihargai.
sumber
Jawaban:
Repo lokal Maven melacak tempat asal artefak menggunakan file bernama "_maven.repositories" di direktori artefak. Setelah menghapusnya, build tersebut berfungsi. Jawaban ini memperbaiki masalah saya.
sumber
aether.enhancedLocalRepository.trackingFilename=some_dummy_file_name
ke proses resolusi ketergantungan; cara termudah adalah dengan menambahkan properti sistem -D ke perintah pemanggilan.Karena opsi di sini tidak berhasil untuk saya, saya membagikan cara saya menyelesaikannya:
Proyek saya memiliki proyek induk (dengan pom.xml sendiri) yang memiliki banyak modul anak, salah satunya (A) memiliki ketergantungan ke anak lain (B). Ketika saya mencoba
mvn package
di A, itu tidak berhasil karena B tidak dapat diselesaikan.Mengeksekusi
mvn install
di direktori induk melakukan pekerjaan itu. Setelah itu, saya bisa melakukanmvn package
di dalam A dan baru kemudian bisa menemukan B.sumber
Bahkan dalam mode offline, maven akan memeriksa repositori jarak jauh jika ada penanda _remote.repositories untuk ketergantungan tersebut. Jika Anda perlu mengoperasikan dalam mode offline, Anda mungkin perlu menghapus file-file ini.
Perintah shell sederhana di bawah ini menghapus file penanda ini. Ini aman dilakukan jika Anda hanya menggunakan mode offline untuk mesin. Saya TIDAK akan melakukan ini pada mesin yang perlu menarik file dari web.
Saya telah menggunakan strategi ini pada server build yang terputus dari web. Kami harus mentransfer repositori ke sana, menghapus file penanda dan kemudian berjalan dalam mode offline.
Di Linux / Unix Anda dapat menghapus file penanda repositori jarak jauh dengan cara ini:
sumber
_remote.repositories
file dengan meneruskan-Daether.enhancedLocalRepository.trackingFilename=some_dummy_file_name
ke proses. (Tidak mencoba pada build Maven yang sebenarnya, tetapi berfungsi saat memanggil Maven secara terprogram; jadi yang pertama juga harus berfungsi)Ketika ini terjadi pada saya, itu karena saya secara membabi buta menyalin settings.xml saya dari template dan masih memiliki
<localRepository/>
elemen kosong . Ini berarti tidak ada repositori lokal yang digunakan saat menyelesaikan dependensi (meskipun artefak yang Anda instal masih diletakkan di lokasi default). Ketika saya menggantinya dengan<localRepository>${user.home}\.m2\repository</localRepository>
itu mulai bekerja.Untuk * nix
<localRepository>${user.home}/.m2/repository</localRepository>
, saya kira.sumber
Maven ingat ketika tidak menemukan sesuatu. Kuncinya adalah "resolusi tidak akan dicoba lagi sampai interval pembaruan internal telah berlalu atau pembaruan dipaksa ->"
Solusi cepatnya adalah menghapus subdirektori "repositori" lokal Anda untuk artefak masalah - dengan asumsi Anda telah memperbaiki masalah dengannya. :)
mvn -U
akan memaksa pembaruan dari repositori jarak jauh - sekali lagi, dengan asumsi Anda sekarang telah mengisi jarak jauh dengan artefak tersebut.sumber
Tangkap semuanya. Ketika solusi yang disebutkan di sini tidak berfungsi (terjadi dalam kasus saya), cukup hapus semua konten dari folder / direktori '.m2', dan lakukan
mvn clean install
.sumber
Jika Anda telah
<repositories/>
mendefinisikan di pom.xml Anda ternyata repositori lokal Anda diabaikan.sumber
Bahkan saya menghadapi masalah ini dan menyelesaikannya dengan 2 cara:
1) Di IDE Anda pilih proyek dan bersihkan semua proyek kemudian instal semua dependensi maven dengan mengklik kanan pada proyek -> buka maven dan Perbarui dependensi proyek pilih semua proyek sekaligus untuk menginstalnya. Setelah ini selesai, jalankan proyek tertentu
2) Lain Apa yang dapat Anda lakukan adalah cek di pom.xml untuk dependensi yang Anda mendapatkan kesalahan dan "mvn clean install" mereka bergantung proyek pertama dan dependensi menginstal maven dari proyek saat di mana Anda menghadapi masalah. Dengan ini dependensi dari proyek lokal akan dibangun dan jars akan dibuat.
sumber
Saya mengalami masalah serupa ketika proyek baru saya bergantung pada oracle jdbc jar (yang telah saya instal di repositori lokal saya dan berfungsi dengan baik untuk proyek lain). Saya mencoba opsi -U, menghapus file .lastupdate atau seluruh direktori dan downlaod lagi, tetapi tidak berhasil. akhirnya, saya menghapus direktori dan menginstalnya secara lokal lagi, berhasil.
sumber
Salah satu kesalahan yang saya temukan di sekitar Maven adalah ketika saya meletakkan file settings.xml saya di direktori yang salah. Itu harus dalam folder .m2 di bawah direktori home user Anda. Periksa untuk memastikan itu ada di tempat yang benar (bersama dengan settings-security.xml jika Anda menggunakannya).
sumber
Saya pernah
DependencyResolutionException
menggunakan Ubuntu Linux ketika saya menginstal artefak lokal melalui skrip shell. Solusinya adalah menghapus artefak lokal dan menginstalnya lagi "secara manual" - meneleponmvn install:install-file
melalui terminal.sumber
Ini terjadi karena saya
http
bukannyahttps
dalam ini:sumber
periksa apakah artefak Y Anda memiliki kemasan yang disetel ke "jar". Jika Anda telah mendefinisikannya sebagai "perang" dengan kesalahan atau salin tempel, itu akan menunjukkan ini aneh "telah di-cache di repositori lokal, resolusi tidak akan diusahakan sampai interval pembaruan internal telah berlalu atau pembaruan dipaksa". Saya mengharapkan sesuatu seperti "artefak Y adalah perang, jenis jar diharapkan".
sumber
Saya mengalami kesalahan yang sama dari penyebab yang berbeda: Saya telah membuat POM pemula yang berisi dependensi "praktik baik" kami, dan membangun & menginstalnya secara lokal untuk mengujinya. Saya bisa "melihatnya" di repo, tetapi proyek yang menggunakannya mendapat kesalahan di atas. Yang saya lakukan adalah mengatur starter POM ke pom, jadi tidak ada JAR. Maven benar sekali bahwa itu tidak ada di Nexus - tapi saya tidak mengharapkannya, jadi kesalahan itu, ummm, tidak membantu. Mengubah POM starter ke kemasan normal & menginstal ulang memperbaiki masalah.
sumber