一个简单的方法来摆脱由SBT产生的*一切*
有没有一种简单的方法来摆脱由于执行SBT构build而生成的所有东西? 事实certificate,它创build目标目录到处都是。 表演
sbt clean clean-cache clean-lib clean-plugins
…并没有摆脱一切。
如果你使用git:
git clean -f -d -x
这将删除每个没有被git跟踪的文件。
在我使用SBT 0.13.5的系统(Ubuntu Linux)以及Coursera函数编程课程中的一些项目中,我发现由于所有的caching文件和Scala下载的重复,所有的文件夹总计高达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中,你不会有许多有用的命令行选项,例如path名中没有星号通配符,但是你可以随时尝试强制:
rmdir /s /q target project/target project/project/target
我能做的最好的自动发现是一个DIR命令:
dir /ad /s /b | find "target"
显然,这对于在Jenkins等集成服务器上进行可重复构build非常重要!
确保所有文件( 包括常青藤高速caching )都存储在集成服务器工作区中,方法是将以下命令行参数提供给sbt:
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
然后单击Jenkins中的“擦除工作区”button或其他集成服务器中的等效工具。 这绝对应该做到这一点!
或者,如果您使用的是sbt启动脚本的最新版本,则可以简单地添加-no-share
。
在Linux或类似的地方,这比find -name
更好,因为它不会意外地删除可能存在于源代码中的任何名为target
目录:
find . -regextype posix-awk -regex \.(/project)*/target -exec rm -r {} +
如果您在shell中运行此命令,则需要引用正则expression式,例如,对于bash:
find . -regextype posix-awk -regex '\.(/project)*/target' -exec rm -r {} +
findBSD(例如在Mac OS X上)命令将是:
find -E . -regex \.(/project)*/target -exec rm -r {} +