Mengendalikan Ralat Header LOC Tidak Sah

1. Pengenalan

Kadang-kadang apabila balang di repo Maven tempatan kita rosak, kita akan melihat ralat: Header LOC tidak sah .

Dalam tutorial ini, kita akan belajar kapan ia berlaku dan bagaimana mengatasinya dan bahkan kadang-kadang menghalangnya.

2. Bilakah "Header LOC Tidak Sah" Berlaku?

Maven memuat turun kebergantungan projek ke lokasi yang diketahui di sistem fail kami yang disebut repositori tempatan. Setiap artifak yang dimuat turun oleh Maven juga disertakan dengan fail checksum SHA1 dan MD5:

Tujuan pemeriksaan ini adalah untuk memastikan integriti artifak yang berkaitan. Oleh kerana rangkaian dan sistem fail boleh gagal, seperti hal-hal lain, ada kalanya artifak rosak, menjadikan kandungan artifak tidak sesuai dengan tandatangannya.

Dalam situasi ini, Maven build membuang ralat "header LOC tidak sah".

Penyelesaiannya adalah dengan mengeluarkan balang yang rosak dari repositori. Mari lihat beberapa cara.

3. Padamkan Repositori Tempatan

Perbaikan cepat untuk ralat adalah menghapus keseluruhan repositori tempatan Maven dan membina semula projek:

rm -rf ${LOCAL_REPOSITORY}

Ini akan menghapus cache tempatan dan memuat turun semula semua kebergantungan projek - tidak begitu cekap.

Perhatikan bahawa repositori tempatan lalai adalah pada $ {user.home} /. M2 / repositori melainkan kami menentukannya dalam tag settings.xml kami Kami juga dapat mencari repositori tempatan dengan arahan: mvn help: evaluasi -Dexpression = settings.localRepository

4. Cari Jar yang Rosak

Penyelesaian lain adalah dengan mengenal pasti balang yang rosak dan menghapusnya dari repositori tempatan .

Apabila kita menggunakan perintah jejak output Maven, ia akan mengandungi perincian jar yang rosak apabila gagal memprosesnya.

Kita boleh mengaktifkan log tahap debug dengan menambahkan -X pada perintah build:

mvn -X package

Jejak timbunan yang dihasilkan akan menunjukkan balang yang rosak ke hujung log. Setelah mengenal pasti balang yang rosak, kita dapat mencarinya di repositori tempatan dan menghapusnya. Setelah dibina, Maven akan mencuba semula memuat turun balang.

Kita juga boleh menguji integriti arkib dengan arahan zip -T :

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

5. Mengesahkan Checksum

Kedua-dua penyelesaian yang disebutkan sebelumnya hanya akan memaksa Maven memuat semula balang tersebut. Sudah tentu, masalah itu boleh berlaku lagi dalam muat turun yang akan datang. Kita boleh menghalangnya dengan mengkonfigurasi Maven untuk mengesahkan checksum semasa memuat turun artifak dari repositori jauh.

Kita boleh menambahkan pilihan –strict-checksum atau -C pada perintah Maven. Ini akan menyebabkan Maven gagal membuat build jika checksum yang dikira tidak sesuai dengan nilai dalam file checksum.

Terdapat dua pilihan, sama ada untuk gagal membina jika checksum tidak sesuai:

-C,--strict-checksums

atau memberi amaran yang merupakan pilihan lalai:

-c,--lax-checksums

Hari ini Maven memerlukan fail tandatangan semasa memuat naik artifak ke repositori pusat. Tetapi mungkin ada artifak di repositori pusat yang tidak mempunyai fail tanda tangan , terutama yang bersejarah. Itulah sebabnya pilihan lalai adalah memberi amaran .

Untuk penyelesaian yang lebih kekal, kita dapat mengkonfigurasi checksumPolicy dalam fail settings.xml Maven . Properti ini menentukan tingkah laku apabila pengesahan artifak checksum gagal. Untuk mengelakkan masalah pada masa akan datang, mari edit fail setting.xml kami untuk gagal memuat turun apabila checksum gagal:

    codehausSnapshots Codehaus Snapshots  false always fail     

Sudah tentu, kita perlu melakukan ini untuk setiap repositori yang dikonfigurasikan.

6. Kesimpulannya

Dalam penulisan ringkas ini, kita telah melihat bila ralat header LOC yang tidak betul dapat berlaku dan pilihan untuk menanganinya.