Maven がダウンロードした依存関係を保存する .m2 フォルダーにファイルが多すぎます。古い依存関係をすべて消去する方法はありますか? たとえば、1、2、および 3 の 3 つの異なるバージョンの依存関係がある場合、クリーニング後は 3 のみが存在する必要があります。.m2 フォルダー内のすべての依存関係に対してどのように行うことができますか?
10 に答える
Unix を使用している場合は、そこにあるファイルのアクセス時間を使用できます。ファイルシステムのアクセス時間を有効にしてから、依存関係を保持したいすべてのプロジェクトのクリーンビルドを実行してから、次のようにします (未テスト!):
find ~/.m2 -amin +5 -iname '*.pom' | while read pom; do parent=`dirname "$pom"`; rm -Rf "$parent"; done
これにより、5 分以上前に最後にアクセスされたすべての *.pom ファイルが検索され (最大 5 分前にビルドを開始したと仮定)、それらのディレクトリが削除されます。
「dry-run」を実行するには、rm の前に「echo」を追加します。
簡単な回答- の .m2 フォルダーを削除しました{user.home}
。たとえば、Windows 10 のユーザー ホームはC:\Users\user1
. を使用してプロジェクトを再構築しますmvn clean package
。プロジェクトで必要な依存関係のみが残ります。
長い答え- .m2 フォルダーは通常のフォルダーと同じで、フォルダーの内容はさまざまなプロジェクトから構築されます。どのライブラリが「古い」かを自動的に把握する方法はないと思います。実際、古いというのは漠然とした言葉です。プロジェクトで以前のバージョンのライブラリが使用されている場合、多くの理由が考えられるため、使用されていないライブラリを特定することはできません。
できることは、.m2 フォルダーを削除してすべてのプロジェクトを再ビルドすることだけです。その後、フォルダーは必要なすべてのライブラリで自動的にビルドされます。
すべてのプロジェクトで特定のバージョンのライブラリのみを使用することに関心がある場合。プロジェクトの pom も最新バージョンに更新することが重要です。つまり、異なる POM が異なるバージョンのライブラリを参照している場合、すべてが .m2 でダウンロードされます。
プロジェクトの実際の依存関係をすべてダウンロードする
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
ローカルの Maven リポジトリを一時的な場所に移動します
mv ~/.m2 ~/saved-m2
すべてのファイルの名前を、保存されたリポジトリから maven-metadata-central.xml* に変更し、maven-metadata.xml* に変更します。
find . -type f -name "maven-metadata-central.xml*" -exec rename -v -- 's/-central//' '{}' \;
ローカル リポジトリの変更されたコピーをミラーとしてセットアップするには、ディレクトリ ~/.m2 とファイル ~/.m2/settings.xml を次の内容で作成します ( userをユーザー名に置き換えます)。
<settings> <mirrors> <mirror> <id>mycentral</id> <name>My Central</name> <url>file:/home/user/saved-m2/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </settings>
プロジェクトの依存関係を再度解決します。
find your-projects-dir -name pom.xml -exec mvn -f '{}' dependency:resolve
これで、必要なアーティファクトが最小限のローカル Maven リポジトリができました。構成ファイルとファイル システムからローカル ミラーを削除します。
.m2->repository フォルダーの下のすべてのコンテンツを消去するだけです。プロジェクトをビルドすると、すべての依存関係がここに読み込まれます。
あなたの場合、以前のプロジェクトは依存関係の古いバージョンを使用していて、現在はバージョンがアップグレードされている可能性があります.m2フォルダーをきれいにして、mvn clean installでプロジェクトをビルドしてください。
これで、最新バージョンのモジュールとの依存関係がこのフォルダーにダウンロードされます。