4.

Maven「invalid LOC header (bad signature)」原因と対処|~/.m2 キャッシュ破損

編集
この記事の要点
  • Maven の invalid LOC header (bad signature) エラー
  • 原因: ~/.m2/repository 内の jar ファイルが破損(ダウンロード失敗の残骸)
  • 対処: 該当ライブラリのフォルダを削除 → mvn install で再ダウンロード
  • 頻発するなら回線不安定 / プロキシ設定が原因のことが多い
  • 一括対応: ~/.m2/repository 全体を削除して再構築(数 GB ダウンロード)

エラー内容

Maven プロジェクトをビルドするとき、または Tomcat 起動時に以下のエラーが出ます:

[ERROR] Failed to execute goal on project myapp:
  Could not resolve dependencies for project com.example:myapp:war:1.0:
  invalid LOC header (bad signature)

# または
java.util.zip.ZipException: invalid LOC header (bad signature)
  at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:nnn)
  at java.base/java.util.zip.ZipFile$Source.(ZipFile.java:nnn)

原因

~/.m2/repository 配下にキャッシュされた jar ファイルが破損しているのが原因です。jar は ZIP 形式で、LOC = Local file header signature の破損は ZIP として読めない状態を意味します。

発生する典型シーン:

  • Maven の初回 / 大量ダウンロード時にネットワーク切断
  • VPN や社内プロキシ経由で不完全な jarがキャッシュされた
  • ディスク容量不足でダウンロードが中断
  • 並行ビルド(複数の Maven 同時実行)でキャッシュ書き込み競合
  • ウイルス対策ソフトの隔離で jar が中途半端な状態

対処1: 該当ライブラリだけ削除(推奨)

エラーメッセージで特定の jar が示唆されている場合、そこだけ削除:

# スタックトレースから問題の jar を特定
# 例: spring-core-5.3.20.jar が壊れている場合

# ライブラリのフォルダを削除
rm -rf ~/.m2/repository/org/springframework/spring-core/5.3.20/

# Windows
rmdir /S /Q "%USERPROFILE%\.m2\repository\org\springframework\spring-core\5.3.20"

# 再ダウンロード
mvn install
# または
mvn dependency:resolve

対処2: -U オプションで強制更新

# Maven 標準の強制更新オプション
mvn clean install -U

# -U は --update-snapshots の短縮形
# SNAPSHOT 依存だけでなく、リリース版もチェックし直す

対処3: ローカルリポジトリ全削除(最終手段)

どの jar が壊れているか分からない・複数破損している場合:

# ★ 注意: 数 GB のダウンロードが発生する
# バックアップしたければ移動: mv ~/.m2/repository ~/.m2/repository.bak

# 削除
rm -rf ~/.m2/repository

# Windows
rmdir /S /Q "%USERPROFILE%\.m2\repository"

# 再ビルドで自動ダウンロード
mvn clean install

対処4: settings.xml でミラー設定

頻繁に破損する場合、ネットワーク経路に問題がある可能性。安定したミラーを設定:



    
        
            aliyun-mirror
            Aliyun Public Maven Mirror
            https://maven.aliyun.com/repository/public
            central
        
    

    
    
        
            my-proxy
            true
            http
            proxy.example.com
            8080
            user
            pass
            localhost|127.0.0.1|*.example.com
        
    

破損ファイルを一括検出するスクリプト

# ~/.m2 配下のすべての jar が読めるかチェック
cd ~/.m2/repository
find . -name "*.jar" -print0 | while IFS= read -r -d '' jar; do
    if ! unzip -tq "$jar" > /dev/null 2>&1; then
        echo "BROKEN: $jar"
        rm -f "$jar"
    fi
done

# 破損したものを削除した後で再ビルド
cd /path/to/project
mvn install

関連エラー

エラー原因
invalid LOC header (bad signature)jar ZIP 構造破損
Could not find artifactjar 自体が存在しない(依存定義ミス / リポジトリ消滅)
error in opening zip file類似。jar 読み込み失敗
Could not transfer artifactネットワーク到達不能 / プロキシ設定
PKIX path building failedSSL 証明書エラー(社内 CA 未インストール等)

予防

  • 安定回線でビルド — 初回ビルドや大規模依存追加時は特に
  • 並行 Maven 実行を避ける — IDE と CLI で同時にビルドしない
  • Nexus / Artifactory をチーム内に立てて社内ミラー化
  • ローカル CI でも同じローカル M2 を使い回すなら排他制御
  • Docker ビルド時はマウントで永続化するか毎回新規ダウンロード
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. モジュール名が無効です。(WAR エクスポート)
  2. 現在のブランチはプル用に構成されていません 構成にキー remote.origin.url の値がありません
  3. サーバーに追加または除去できるリソースがありません。
  4. invalid LOC header (bad signature)