Mavenの外部HTTPリポジトリブロック解除方法
セキュリティ注意
HTTPリポジトリのブロックはMaven 3.8.1で導入された重要なセキュリティ機能です。本ガイドで紹介する方法を使用する前に、リポジトリをHTTPSにアップグレードできないか検討してください。
問題の概要
Maven 3.8.1以降、デフォルトで外部HTTPリポジトリへのアクセスがブロックされるようになりました。これはCVE-2021-26291に対応するセキュリティ強化策です。
エラーメッセージ例:
Blocked mirror for repositories: [repository-id (http://example.com/repo)]
解決方法
方法1: 特定リポジトリのみを許可(推奨)
最も安全な方法は、必要なHTTPリポジトリのみを個別に許可することです。
~/.m2/settings.xml
に以下の設定を追加:
<settings>
<mirrors>
<mirror>
<id>my-repo-http-unblocker</id>
<mirrorOf>your-repo-id</mirrorOf>
<name>Unblocker for internal HTTP repository</name>
<url>http://your-internal-repo-url</url>
</mirror>
</mirrors>
</settings>
TIP
<mirrorOf>
には、pom.xml
で定義されているリポジトリIDを指定します
方法2: プロジェクト固有の設定
チームで共有するプロジェクトの場合は、プロジェクト内に設定ファイルを作成:
.mvn/local-settings.xml
:
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0
http://maven.apache.org/xsd/settings-1.2.0.xsd">
<mirrors>
<mirror>
<id>internal-repo-unblocker</id>
<mirrorOf>internal-repo</mirrorOf>
<url>http://internal-repo-url</url>
</mirror>
</mirrors>
</settings>
.mvn/maven.config
:
--settings
./.mvn/local-settings.xml
方法3: パスワード保護されたリポジトリの場合
認証が必要なHTTPリポジトリの場合は、サーバー設定も追加:
<settings>
<servers>
<server>
<id>your-repo-id</id>
<username>your-username</username>
<password>your-password</password>
</server>
</servers>
<mirrors>
<mirror>
<id>your-repo-id</id>
<mirrorOf>your-repo-id</mirrorOf>
<url>http://your-repo-url</url>
<blocked>false</blocked>
</mirror>
</mirrors>
</settings>
注意点とベストプラクティス
非推奨な方法
以下の方法はセキュリティリスクがあるため避けてください:
- すべてのHTTPリポジトリを無条件に許可
- Mavenのグローバル設定を直接変更
- Mavenのバージョンをダウングレード
推奨されるアプローチ
- HTTPSへの移行: リポジトリ管理者にHTTPS対応を依頼
- 最小権限の原則: 必要なリポジトリのみ許可
- 設定の共有: プロジェクト設定をチームで共有
トラブルシューティング
IntelliJ IDEAの場合
IntelliJにバンドルされているMavenを使用している場合、設定ファイルのパスは異なります:
${user.home}/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/バージョン番号/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/conf/settings.xml
設定が反映されない場合
- Mavenの設定ファイルの優先順位を確認
- プロジェクトの再読み込みを実行
- Mavenのキャッシュをクリア:
mvn dependency:purge-local-repository
まとめ
MavenのHTTPリポジトリブロックは重要なセキュリティ機能ですが、やむを得ずHTTPリポジトリを使用する必要がある場合、本ガイドで紹介した方法で特定のリポジトリのみを許可できます。常にセキュリティリスクを考慮し、可能な限りHTTPSへの移行を優先してください。