1

すべての Maven プロジェクトを一度にクリーンアップしたいと考えています。しかし、すべてのフォルダーを手動で段階的に調べてmvn clean. そこで、find コマンドでこれを行うことを考えました。私は次の呼び出しを試みました:

find . -name pom.xml -exec mvn clean {} \;

その結果、エラー メッセージfind: missing argument for "-exec" が表示されました。

今私の質問: findexecでそのような呼び出しを行うことは可能ですか? すべてのコマンドをfind -execの引数として使用できると思いました。

よろしく
お願いします

4

3 に答える 3

8

実行する exec を展開すると、次のようになります。

mvn clean dir1/dir2/pom.xml

pom ファイルを Maven ゴールとして扱ったことがわかります。

-f フラグとアポストロフィ (グロビングを防ぐため) を使用する必要があります。

find . -name pom.xml -exec mvn clean -f '{}' \;

私はこのコマンドを使用します

find . -name 'target' -a -type d -exec rm -rfv '{}' \;

これにより、すべての対象フォルダが削除されます。

于 2013-08-13T07:59:25.427 に答える
3

そのようなpomファイルの指定をサポートするmvnコマンドのバージョンはわかりませんが、たとえばMaven 3.xでは機能しません。ちょっとした変化が必要です。-execdirを指定して実行すると、ディレクトリが見つかった pom ファイルの場所に自動的に変更されます (通常は -exec よりも安全です)。

find . -name pom.xml -execdir mvn clean \;

または指定された代替 pom ファイル オプション-fを使用:

find . -name pom.xml -exec mvn clean -f '{}' \;
于 2015-03-12T10:38:57.010 に答える
0

私のように、非常に多くの Maven プロジェクトをチェックアウトしている場合、提案されたアプローチには数時間かかる場合があります。現在、700 件のプロジェクトをチェックアウトしています。

find . -maxdepth 3 -type f -name pom.xml | 
  sed 's|/pom.xml$|/target|' | 
  xargs -I{} bash -c '[ -d {} ] && echo {}' | 
  xargs -I{} bash -c 'mvn clean -f "$(sed "s|/target$|/pom.xml|" <<< "{}")"'

ここで行うことは、clean コマンドを適用する前に、ターゲット フォルダーが存在することをテストすることです。
これにより、理由がない限り、実行時間はプロジェクトの総数ではなく、最近作業したプロジェクトに比例します。
私の番号が請求書に合わない場合に備えて、maxdepth も少しいじる必要があるかもしれません。

于 2021-05-10T05:24:17.660 に答える