Menangani Kesalahan Header LOC Tidak Valid Maven

1. Perkenalan

Kadang-kadang ketika jar di repo Maven lokal kita rusak, kita akan melihat kesalahan: Header LOC tidak valid .

Dalam tutorial ini, kita akan belajar kapan itu terjadi dan bagaimana menangani dan bahkan mencegahnya.

2. Kapan "Header LOC Tidak Valid" Terjadi?

Maven mengunduh dependensi proyek ke lokasi yang diketahui di sistem file kami yang disebut repositori lokal. Setiap artefak yang diunduh Maven juga disertai dengan file checksum SHA1 dan MD5:

Tujuan checksum ini adalah untuk memastikan integritas artefak terkait. Karena jaringan dan sistem file bisa gagal, sama seperti yang lainnya, ada kalanya artefak rusak, membuat konten artefak tidak cocok dengan tanda tangan.

Dalam situasi ini, build Maven menampilkan error "header LOC tidak valid".

Solusinya adalah menghapus jar yang rusak dari repositori. Mari kita lihat beberapa cara.

3. Hapus Repositori Lokal

Perbaikan cepat untuk kesalahan ini adalah dengan menghapus seluruh repositori lokal Maven dan membangun proyek lagi:

rm -rf ${LOCAL_REPOSITORY}

Ini akan menghapus cache lokal dan mengunduh ulang semua dependensi proyek - tidak terlalu efisien.

Perhatikan bahwa repositori lokal default ada di $ {user.home} /. M2 / repository kecuali kita menetapkannya di tag settings.xml kita . Kami juga dapat menemukan repositori lokal dengan perintah: mvn help: evalu -Dexpression = settings.localRepository

4. Temukan Stoples Rusak

Solusi lain adalah mengidentifikasi jar korup tertentu dan menghapusnya dari repositori lokal .

Saat kami menggunakan perintah pelacakan tumpukan keluaran Maven, perintah ini akan berisi detail jar yang rusak saat gagal memprosesnya.

Kita dapat mengaktifkan logging level debug dengan menambahkan -X ke perintah build:

mvn -X package

Jejak tumpukan yang dihasilkan akan menunjukkan toples yang rusak di bagian akhir log. Setelah mengidentifikasi jar yang rusak, kita dapat menemukannya di repositori lokal dan menghapusnya. Sekarang setelah dibuat, Maven akan mencoba mendownload jar.

Selain itu, kami dapat menguji integritas arsip dengan perintah zip -T :

find ${LOCAL_REPOSITORY} -name "*.jar" | xargs -L 1 zip -T | grep error

5. Validasi Checksum

Dua solusi yang disebutkan sebelumnya hanya akan memaksa Maven untuk mengunduh ulang jar. Tentu saja, masalah dapat terjadi lagi di unduhan di masa mendatang. Kita dapat mencegahnya dengan mengkonfigurasi Maven untuk memvalidasi checksum saat mendownload artefak dari repositori jarak jauh.

Kita bisa menambahkan opsi –strict-checksum atau -C ke perintah Maven. Ini akan menyebabkan Maven gagal membangun jika checksum yang dihitung tidak cocok dengan nilai dalam file checksum.

Ada dua opsi, gagal membangun jika checksum tidak cocok:

-C,--strict-checksums

atau peringatkan yang merupakan opsi default:

-c,--lax-checksums

Hari ini Maven membutuhkan file tanda tangan saat mengunggah artefak ke repositori pusat. Tetapi mungkin ada artefak di repositori pusat yang tidak memiliki file tanda tangan , terutama yang bersejarah. Itulah mengapa opsi defaultnya adalah warn .

Untuk solusi yang lebih permanen, kita dapat mengkonfigurasi checksumPolicy di file settings.xml Maven . Properti ini menetapkan perilaku saat verifikasi checksum artefak gagal. Untuk menghindari masalah di masa mendatang, mari edit file settings.xml kita agar gagal mengunduh saat checksum gagal:

    codehausSnapshots Codehaus Snapshots  false always fail     

Kami, tentu saja, perlu melakukan ini untuk setiap repositori kami yang dikonfigurasi.

6. Kesimpulan

Dalam artikel singkat ini, kita telah melihat ketika kesalahan header LOC yang tidak valid dapat terjadi dan opsi untuk menanganinya.