是否有一种简单的方法可以摆脱因执行SBT构建而生成的所有内容?事实证明它在整个地方创建了目标目录。表演
sbt clean clean-cache clean-lib clean-plugins
......并没有摆脱所有。
答案 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作为代码作为文档。