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


81

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

sbt clean clean-cache clean-lib clean-plugins

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


私もこれを見たいので、チケットを提出しました:code.google.com/p/simple-build-tool/issues/detail?id
Landon Kuhn

その課題追跡システムは使用されなくなったため、ここで再送信しました:github.com/sbt/sbt/issues/896
Robin Green

回答:


69

SBT 0.13.5を搭載した私のシステム(Ubuntu Linux)とCoursera関数型プログラミングコースのいくつかのプロジェクトでは、すべてのキャッシュファイルと重複したScalaダウンロードのために、12プロジェクトでフォルダーがすべて合計2.1GBであることがわかりました。

動作し、ほとんどすべてをクリーンアップする現在のSBTコマンドは次のとおりです。

sbt clean clean-files

これにより、最上位の「target」フォルダーと「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"

-ffindコマンドを使用するときにフラグを設定する必要がありますか?不必要で潜在的に危険なようです。
2017

これは私にとってはうまくfind . -name target -type d -exec rm -r {} \;
いき

'rm'コマンドの "-f"部分は必要ありませんが、一部のシステムでは、削除確認の長いリストよりも望ましい場合があります。
RudeDude 2017

3
@AlbertBikeev:多分sbt clean cleanFilesあなたのために働く
SERV-INC

2
SBTクリーンcleanFiles
frostcs

6

明らかに、これはJenkinsなどの統合サーバーでの再現可能なビルドにとって非常に重要です。

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

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

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

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


すでにJenkinsを使用している場合、クリーンアッププラグインは、ワークスペースがクリアされていることを確認するための優れた代替手段です
ecoe

5

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 {} +

2

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

Makefileの内容:

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

次に実行します:

make clean

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.