TL;DR
-
Maven
はdependency
の検索をrepositories
の上の方に定義したリポジトリから行う - このため、
Maven Central
など、優先度の高いリポジトリをrepositories
の下に書くと、他のリポジトリから検索を始めてしまい、同期にかかる時間が伸びる
状況
ある日から突然ライブラリのアップデートにかかる時間が物凄く伸びました。
回線速度には特に問題が無かったため、pom
の設定の方が原因だと思われました。
現象前後では、Maven Central
のhttps
必須化に伴って発生した問題を修正するため、以下のように確実にhttps
で繋ぐための設定をrepositories
に足していました。
pom.xml
<repositories>
<!-- その他リポジトリ -->
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
問題点
Maven
はrepositories
に定義されたリポジトリを上から順に検索します。
つまり、上記設定では「その他リポジトリを全て舐めた後にCentral
を見にいく」という挙動になります。
一方、利用しているライブラリは大半がCentral
に存在しているため、結果としてアップデート全般が物凄く遅くなっていました。
対処
優先度の高いものから順に書き直せば問題は解決します。
pom.xml
<repositories>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
<!-- その他リポジトリ -->
</repositories>
応用
有用性は微妙な感が有りますが、ライブラリの同期をその場だけ高速化したい場合、一時的にrepository
の優先度を変えた上で、キャッシュできたら優先度を戻せば早くなります。