摆脱SBT产生的*一切*的简单方法?

时间:2010-12-19 13:56:43

标签: scala sbt

是否有一种简单的方法可以摆脱因执行SBT构建而生成的所有内容?事实证明它在整个地方创建了目标目录。表演

sbt clean clean-cache clean-lib clean-plugins

......并没有摆脱所有。

4 个答案:

答案 0 :(得分:60)

在我的系统(Ubuntu Linux)上使用SBT 0.13.5以及Coursera Functional Programming课程中的一些项目,由于所有缓存文件和重复的Scala下载,我发现12个项目的文件夹总计高达2.1GB。

当前运行并且几乎清除所有内容的SBT命令是:

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 {} \;

对于我自己的一个项目,这让我们回到了444KB,而2.1GB则降到了5.0MB!

在Windows中,您将没有尽可能多的有用命令行选项,例如路径名中没有星号通配符,但您可以随时尝试使用:

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

我自动查找的最佳方法是DIR命令:

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

答案 1 :(得分:5)

显然,这对于像Jenkins这样的集成服务器上可重现的构建非常重要。

确保所有文件(包括常春藤缓存)都存储在集成服务器工作区中,方法是将命令行参数提供给sbt:

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

然后单击Jenkins中的Wipe Out Workspace按钮或其他集成服务器中的等效按钮。那绝对应该这样做!

或者,如果您使用的是最新版本的sbt启动器脚本,则只需添加-no-share即可。

答案 2 :(得分:4)

在Linux或类似产品上,这比find -name更好,因为它不会意外删除源代码中可能存在的任何名为target的目录:

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

如果您在shell中运行此命令,则需要引用正则表达式,例如bash:

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

使用BSD查找(例如在Mac OS X上)命令将为:

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

答案 3 :(得分:1)

我同意建议的很好的解决方案,就我个人而言,我作为gnu make任务包括一些细微的变化。

Makefile的内容:

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

然后运行:

make clean

我喜欢使用Makefiles作为代码作为文档。