Baru-baru ini, Apache Maven tampaknya mengalami masalah caching. Melakukan instalasi bersih pada proyek kami menggunakan Windows Vista atau Windows 7 kadang-kadang menghasilkan artefak dengan data yang sama dengan build sebelumnya walaupun file artifact yang lebih baru seharusnya diperbarui.
Apakah ada cara untuk menghapus cache ini untuk memaksa pakar untuk selalu memicu pembangunan artifak lokal yang harus dibangun?
Secara khusus, kami mengalami masalah dalam membangun webapp dengan plugin perang. Versi Maven adalah 3.0.3. Versi plugin perang adalah 2.1.1.
-U
bendera yang akan memperbarui artefak?mvn clean install
menempatkan artefak baru ke repositori lokal?mvn clean install -Dmaven.repo.local=/alternate/repo/location
Jawaban:
Hapus artefak (atau repo lokal lengkap) dari
c:\Users\<username>\.m2\repository
dengan tangan.sumber
The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
mvn dependency:purge-local-repository
akhirnya berhasilUntuk membersihkan cache lokal coba gunakan plug-in dependensi.
mvn dependency:purge-local-repository
: Ini adalah upaya untuk menghapus file repositori lokal tetapi selalu berjalan dan mengisi repositori lokal setelah semuanya dihapus.mvn dependency:purge-local-repository -DreResolve=false
: Ini menghindari penyelesaian kembali dependensi tetapi tampaknya masih pergi ke jaringan di kali.mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false
: Ini ditambahkan oleh Paweł Prażak dan tampaknya bekerja dengan baik. Saya akan menggunakan yang ketiga jika Anda ingin repo lokal dikosongkan, dan yang pertama jika Anda hanya ingin membuang repo lokal dan mendapatkan dependensi lagi.sumber
<User_Name>/.m2
lokasi. Tidak yakin apakah itu alasannya.Sudahkah Anda memeriksa / mengubah pengaturan updatePolicy untuk repositori Anda di
settings.xml
.Cobalah untuk mengaturnya
always
.sumber
<updatePolicy>
di pom.xml saya, tetapi ada<snapshotPolicy>
Saya akan melakukan hal berikut:
Bendera memberi tahu pakar untuk tidak mencoba menyelesaikan dependensi atau menekan jaringan. Hapus apa yang Anda lihat secara lokal.
Dan untuk ukuran yang baik, abaikan kesalahan (
--fail-at-end
) sampai akhir. Ini kadang-kadang berguna untuk proyek yang memiliki set dependensi yang agak kacau atau bergantung pada repositori internal yang agak kacau (itu terjadi.)sumber
Ini berfungsi pada Spring Tool Suite v 3.1.0.RELEASE, tapi saya rasa ini juga tersedia di Eclipse.
Setelah menghapus artefak dengan tangan (seperti yang dinyatakan oleh palacsint di atas) di
/username/.m2
direktori, indeks ulang file dengan melakukan hal berikut:Pergi ke:
Windows->Preferences->Maven->User Settings
Tidak bisa.Klik
Reindex
tombol di sebelahLocal Repository
kotak teks. Klik "Terapkan" lalu "OK" dan Anda selesai.sumber
Seperti yang ditunjukkan oleh beberapa jawaban, kadang-kadang Anda benar-benar ingin menghapus repositori lokal seluruhnya, misalnya, mungkin ada beberapa artefak yang tidak dapat dihapus karena tidak lagi dirujuk oleh pom.
Jika Anda ingin memiliki penghapusan ini tertanam dalam fase pakar, seperti misalnya
clean
Anda dapat menggunakanmaven-clean-plugin
dan mengakses repositori melalui pengaturan, misalnya:sumber
Gunakan
mvn dependency:purge-local-repository -DactTransitively=false -Dskip=true
jika Anda memiliki plugin pakar sebagai salah satu modul. Kalau tidak, Maven akan mencoba mengkompilasi ulang, sehingga mengunduh dependensi lagi.sumber
Saya memiliki masalah yang sama, dan saya menulis satu-baris di shell untuk melakukannya.
Saya melakukannya sebagai satu-liner karena saya ingin memiliki proyek Jenkins untuk menjalankan ini kapan saja saya butuhkan, jadi saya tidak perlu masuk ke hal-hal, dll. Jika Anda membiarkan sendiri shell-script untuk itu, Anda bisa menulisnya lebih bersih:
Seharusnya berhasil, tetapi saya belum menguji semua skrip itu. (Saya sudah menguji perintah pertama, tetapi tidak seluruh skrip.) Pendekatan ini memiliki kelemahan menjalankan perintah rumit yang besar terlebih dahulu. Itu idempoten, jadi Anda bisa mengujinya sendiri. Penghapusan adalah perintahnya sendiri setelah itu, dan ini memungkinkan Anda untuk mencoba semuanya dan memeriksa apakah ia melakukan apa yang Anda pikirkan, karena Anda tidak boleh mempercayai perintah penghapusan tanpa verifikasi. Namun, itu pintar karena satu alasan: itu portabel. Ini menghormati file settings.xml Anda. Jika Anda menjalankan perintah ini, dan beri tahu maven untuk menggunakan file xml tertentu (argumen -s atau --settings), ini masih akan berfungsi. Jadi Anda tidak perlu bermain-main untuk memastikan semuanya sama di mana-mana.
Agak sulit, tapi ini cara yang layak untuk berbisnis, IMO.
sumber
Jadi ada beberapa perintah yang bisa Anda gunakan untuk membersihkan
juga menghapus folder repositori dari .m2 dapat membantu.
sumber