Apache Mavenのキャッシュをどのようにクリアしますか?


212

最近、Apache Mavenにキャッシュの問題があるようです。Windows VistaまたはWindows 7を使用してプロジェクトでクリーンインストールを実行すると、新しいアーティファクトのファイルが更新されているはずの場合でも、以前のビルドと同じデータでアーティファクトが生成されることがあります。

ビルドする必要があるローカルアーティファクトのクリーンビルドを常にトリガーするようにMavenに強制するために、このキャッシュをクリアする方法はありますか?

特に、warプラグインを使用してWebアプリケーションを構築する際に問題が発生しています。Mavenのバージョンは3.0.3です。Warプラグインのバージョンは2.1.1です。


2
-Uアーティファクトを更新するフラグを試しましたか?
アミールラミンファー

2
詳細を教えてください。扶養家族は戦争で更新されませんか?もしそうなら、扶養家族はスナップショットのバージョンを持っていますか?
Raghuram、2011

マルチモジュールプロジェクトですか?依存モジュールのバージョン番号を確認しましたか?再現できますか?mvn clean install新しいアーティファクトをローカルリポジトリに配置しますか?
palacsint 2011

@ MetroidFan2002ここにマークされた回答をお願いします。または、自分で見つけた場合の解決策を書くことができます。
ナマン2017年

1
mvn clean install -Dmaven.repo.local=/alternate/repo/location
Gayan Weerakutti

回答:


225

アーティファクト(またはローカルリポジトリ全体)をc:\Users\<username>\.m2\repository手動で削除します。


4
すでに試してみましたが、うまくいきませんでした。しかし提案をありがとう。
MetroidFan2002、2011

3
それも、再起動後に、Mavenの成果物の多くの一体彼らにハンドルを持っている、ように思える:The action can't be completed because the folder or file in it is open in another program. Close the folder or file and try again.
liltitus27

1
フォルダーの場所はシステムによって異なる場合があることに注意してください
。Mavenリポジトリー

9
@ liltitus27ここでも同じですが、〜/ .m2 / repositoryを一掃するだけでは機能せず、mvn dependency:purge-local-repositoryようやく機能しました
qbert65536

はい、これは私にとって100%機能しました-管理者ではなくユーザーとしての企業ネットワーク上のWindows10
Graeme Phillips

176

ローカルキャッシュを消去するには、依存関係プラグインを使用してみてください。

  1. mvn dependency:purge-local-repository:これは、ローカルリポジトリファイルを削除しようとする試みですが、削除された後は常にローカルリポジトリを埋め尽くします。
  2. mvn dependency:purge-local-repository -DreResolve=false:これにより、依存関係の再解決は回避されますが、時々まだネットワークにアクセスしているようです。
  3. mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false:これはPawełPrażakによって追加され、うまく機能しているようです。ローカルリポジトリを空にしたい場合は3番目を使用し、ローカルリポジトリを破棄して再び依存関係を取得したい場合は1番目を使用します。

4
それらの違いは何ですか?
Pieter De Bie

13
1つ目はローカルリポジトリファイルを削除しようとする試みですが、削除された後は常にローカルリポジトリがいっぱいになり、ローカルリポジトリがいっぱいになります。2つ目は、依存関係の再解決を回避しますが、まだネットワークにアクセスしているようです。3番目はPawełPrażakによって追加され、うまく機能しているようです。ローカルリポジトリを空にしたい場合は3番目を使用し、ローカルリポジトリを破棄して再び依存関係を取得したい場合は1番目を使用します。
ブライアンC.

Linuxシステムのコマンドラインから。mvnをインストールする必要があります。maven.apache.org/install.html
ブライアンC.

追加のパラメーターで特定のグループ/アーティファクトをターゲットにできることを追加します。この答えは間違いなく私が探していたものです(オプション3)。これがその追加パラメーターです::: mvn dependency:purge-local-repository -DmanualInclude = "myGroupId" -DsnapshotsOnly = true -DactTransitively = false -dreResolve = false
granadaCoder

ローカルリポジトリ内のすべてのコンテンツを削除する目的で3番目のオプションを試しましたが、機能しません。この時点まで、この目標を達成するためのユニークな方法は、そのディレクトリのすべてのコンテンツを手動で削除することです。私が持っているローカルリポジトリとは別の場所で<User_Name>/.m2場所を。それが理由かどうかはわかりません。
マヌエルジョーダン

13

でリポジトリのupdatePolicy設定を確認または変更しましたかsettings.xml

この要素は、更新が発生する頻度を指定します。MavenはローカルPOMのタイムスタンプ(リポジトリのmaven-metadataファイルに保存されている)をリモートと比較します。選択肢は、常に、毎日(デフォルト)、interval:X(Xは分単位の整数)、またはなしです。

に設定してみてくださいalways


1
これに対処するための可能なヘルプ... <updatePolicy>pom.xml にはありませんが、あります<snapshotPolicy>
Al Lelopath

updatePolicyは、settings.xmlのどこにでも常に設定されています。
MasterJoe2 2018

11

私は次のようにします:

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

フラグは、依存関係を解決したりネットワークにヒットしたりしないようにMavenに指示します。ローカルに表示されているものを削除します。

そして、適切な対策として、--fail-at-end最後までエラー()を無視します。これは、ややめちゃくちゃな依存関係のセットがあるプロジェクトや、ややめちゃくちゃな内部リポジトリーに依存しているプロジェクトで役立つことがあります(発生します)。


1
このようなクリーンアップのためにローカルキャッシュフォルダーを単に削除するだけでは不十分ですか?

1
すべての推移的な依存関係をすべて知っていれば可能です。しかし、それは退屈な作業になります(または、キャッシュ全体を削除することもできますが、問題のアーティファクトに関係のないものについては、Mavenがすべてを再度ダウンロードするように強制されます)。
luis.espinal

6

これはSpring Tool Suite v 3.1.0.RELEASEで動作しますが、Eclipseでも利用できると思います。

/username/.m2ディレクトリ内のアーティファクトを手動で(上記のpalacsintで述べたように)削除した後、以下を実行してファイルのインデックスを再作成します。

移動:

  • Windows->Preferences->Maven->User Settings メニュー。

テキストボックスのReindex横にあるボタンをクリックしますLocal Repository。「適用」、「OK」の順にクリックすれば完了です。


2

一部の回答が指摘しているように、ローカルリポジトリを完全に削除したい場合もあります。たとえば、pomで参照されなくなったためにパージできないアーティファクトが存在する場合があります。

たとえば、この削除をMavenフェーズに埋め込むclean場合は、を使用してmaven-clean-plugin、次のような設定からリポジトリにアクセスできます。

 <plugin>
    <inherited>false</inherited>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <phase>clean</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Base clean is attached to deleting local maven cache</echo>
                    <echo>${settings.localRepository}</echo>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <inherited>false</inherited>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>${settings.localRepository}</directory>
            </fileset>
        </filesets>
    </configuration>
</plugin>

2

mvn dependency:purge-local-repository -DactTransitively=false -Dskip=trueモジュールの1つとしてMavenプラグインがある場合に使用します。そうでない場合、Mavenはそれらを再コンパイルして、依存関係を再度ダウンロードしようとします。


1
これは実際に私が探していたもので、タイプミスがあります(スキップのダッシュがない):mvn dependency:purge-local-repository -DactTransitively = false -Dskip = true
shoguren

0

私はこれと同じ問題を抱えていて、それを行うためにシェルでワンライナーを書きました。

rm -rf $(mvn help:evaluate -Dexpression=settings.localRepository\
                       -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN -B \
                       -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn | grep -vF '[INFO]')/*

Jenkinsプロジェクトを必要なときにいつでも実行できるようにしたいので、ワンライナーとして実行しました。そのため、他のものにログオンする必要はありませんでした。シェルスクリプトを許可すると、あなたはそれをよりきれいに書くことができます:

#!/usr/bin/env bash
REPOSITORY=$(mvn help:evaluate \
  -Dexpression=settings.localRepository \
  -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN \
  -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
  --batch-mode \
  | grep -vF '[INFO]')

rm -rf $REPOSITORY/*

動作するはずですが、そのスクリプトのすべてをテストしていません。(最初のコマンドはテストしましたが、スクリプト全体はテストしていません。)このアプローチには、大きくて複雑なコマンドを最初に実行するという欠点があります。べき等なので、自分でテストできます。削除は後で独自のコマンドになります。検証なしで削除コマンドを信頼するべきではないため、これを試して、意図したとおりに機能することを確認できます。ただし、これには1つの理由があります。これは、settings.xmlファイルを尊重します。このコマンドを実行していて、mavenに特定のxmlファイル(-sまたは--settings引数)を使用するように指示しても、これは引き続き機能します。したがって、すべてがどこでも同じであることを確認するためにいじくる必要はありません。

それは少し用心深いですが、それはビジネスを行う上品な方法です、IMO。


-3

したがって、クリーニングに使用できるいくつかのコマンドがあります

 1. mvn clean cache   
 2. mvn clean install 
 3. mvn clean install -Pclean-database

.m2からリポジトリフォルダを削除することも役立ちます。


1
「mvn clean cache」は何をすることになっていますか?それは私には認められたコマンドではないようです。
AMTerp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.