web-dev-qa-db-ja.com

SBTによって生成された*すべて*を取り除く簡単な方法は?

SBTビルドを実行した結果として生成されたすべてのものを取り除く簡単な方法はありますか?場所全体にターゲットディレクトリを作成することがわかりました。実行中

sbt clean clean-cache clean-lib clean-plugins

...すべてを取り除くわけではありません。

76

SBT 0.13.5とCoursera Functional Programmingコースのプロジェクトを含む私のシステム(Ubuntu Linux)では、すべてのキャッシュファイルと重複したScalaダウンロードのために、12プロジェクトのフォルダーはすべて合計2.1GBでした。

動作して取得する現在のSBTコマンドalmostすべてが削除されました:

sbt clean clean-files

これにより、最上位の「ターゲット」および「lib_managed」フォルダー(この場合は23MBから3.2MBまで)が削除されますが、プロジェクトの下にいくつかのターゲットフォルダーが残ります。

./project/project/project/target
./project/project/target
./project/target

これは、Linuxのfindコマンド(@ jack-oconnorからも投稿)が非常に役立つ場所です。

find . -name target -type d -exec rm -rf {} \;

これにより、私自身のプロジェクトの1つで444KBに戻り、2.1GBが5.0MBになりました!

Windowsでは、それほど多くの便利なコマンドラインオプションはありません。パス名にはスターワイルドカードは使用できませんが、次の方法でいつでも試すことができます。

rmdir /s /q target project/target project/project/target

自動検出でできる最善の方法は、DIRコマンドです。

dir /ad /s /b | find "target"
63
RudeDude

Jenkinsなどの統合サーバーで再現可能なビルドを作成する場合、これは明らかに非常に重要です!

次のようなコマンドライン引数をsbtに指定することにより、すべてのファイルivyキャッシュを含むが統合サーバーワークスペース内に格納されていることを確認します。

-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy

次に、Jenkinsの[ワークスペースのワイプ]ボタン、または他の統合サーバーの同等のボタンをクリックします。それは間違いなくそれを行う必要があります!

または、sbtランチャースクリプトの最新バージョンを使用している場合は、単に-no-share代わりに。

6
Robin Green

Linuxなどでは、find -nameは、ソースコードに存在する可能性のあるtargetという名前のディレクトリを誤って削除しないためです。

find . -regextype posix-awk -regex \.(/project)*/target -exec rm -r {} +

シェル内でこのコマンドを実行している場合、たとえばbashのように正規表現を引用する必要があります。

find . -regextype posix-awk -regex '\.(/project)*/target' -exec rm -r {} +

BSD find(例:Mac OS X)では、コマンドは次のようになります:

find -E . -regex \.(/project)*/target -exec rm -r {} +
4
Adrian Hempel

私は非常に良い提案された解決策に同意します。個人的には、gnu makeタスクとしてわずかなバリエーションを含めます。

makefileの内容:

clean:
    find . -name target | xargs rm -fr

次に実行します:

make clean

ドキュメントとしてのコードとしてMakefileを使用するのが好きです。

2
Jose Miguel