Mavenの"Blocked mirror for repositories"エラーの解決方法
問題の概要
Maven 3.8.1以降でビルド時に「Blocked mirror for repositories」エラーが発生することがあります。このエラーは、セキュリティ強化の一環として、MavenがHTTPプロトコルを使用する外部リポジトリをデフォルトでブロックするようになったことが原因です。
セキュリティ上の注意
HTTPリポジトリは中間者攻撃(MITM)のリスクがあるため、可能な限りHTTPSリポジトリを使用することを推奨します。
解決方法
方法1: HTTPSリポジトリの使用(推奨)
リポジトリがHTTPSをサポートしている場合は、URLをHTTPSに変更します。
<repository>
<id>primefaces.org</id>
<name>PrimeFaces Maven Repository</name>
<url>https://repository.primefaces.org</url>
</repository>
方法2: 特定のHTTPリポジトリを許可するミラーの設定
HTTPSが利用できない場合、特定のHTTPリポジトリのみを許可するミラーを設定します。
<mirror>
<id>custom-http-mirror</id>
<name>Custom HTTP Mirror</name>
<url>http://example.com/repository/</url>
<mirrorOf>repository-id</mirrorOf>
</mirror>
方法3: デフォルトのHTTPブロッカーを無効化
settings.xml
でデフォルトのHTTPブロッカーを無効化します。
<!-- /usr/share/maven/conf/settings.xml -->
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>dummy</mirrorOf>
<url>http://127.0.0.1/</url>
<blocked>false</blocked>
</mirror>
<!-- ~/.m2/settings.xml -->
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:dummy:*</mirrorOf>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
方法4: リポジトリを除外してブロックを回避
!repositoryId
を使用して特定のリポジトリをブロック対象から除外します。
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>!repositoryId,external:http:*</mirrorOf>
<name>Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
IDEでの設定(IntelliJ IDEA)
IntelliJ IDEAを使用している場合、以下の設定を確認してください:
- File → Settings → Build, Execution, Deployment → Build Tools → Maven
- User settings fileが正しい
settings.xml
を指しているか確認 - 必要に応じてOverrideチェックボックスをオンにする
トラブルシューティング
.m2/repository
フォルダを削除して再ビルドする- 使用しているMavenの設定ファイルの場所を確認する(グローバル設定とユーザー設定)
- Mavenのバージョンを3.6系にダウングレードする(一時的な解決策)
パフォーマンスチップ
リポジトリの設定を変更した後は、mvn clean install -U
を実行して依存関係の更新を強制することを推奨します。
まとめ
Mavenの「Blocked mirror for repositories」エラーは、セキュリティ強化のための変更によるものです。最も安全な解決策はHTTPSリポジトリを使用することですが、やむを得ない場合には上記の方法でHTTPリポジトリへのアクセスを許可することができます。
常にセキュリティを考慮し、必要最小限の設定変更にとどめることを心がけましょう。