有没有简单的方法可以消除执行SBT构建后生成的所有内容?事实证明,它到处都会创建目标目录。表演
sbt clean clean-cache clean-lib clean-plugins
...并不能摆脱一切。
有没有简单的方法可以消除执行SBT构建后生成的所有内容?事实证明,它到处都会创建目标目录。表演
sbt clean clean-cache clean-lib clean-plugins
...并不能摆脱一切。
Answers:
在具有SBT 0.13.5的系统(Ubuntu Linux)和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"
-f
使用find命令时是否需要具有标志?似乎是不必要的,并且可能是不安全的。
find . -name target -type d -exec rm -r {} \;
sbt clean cleanFiles
对您有用
显然,这对于在诸如Jenkins之类的集成服务器上可复制的构建非常重要!
通过向sbt提供这样的命令行参数,确保所有文件(包括常春藤缓存)都存储在集成服务器工作空间中:
-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy
然后在Jenkins中单击“擦除工作区”按钮,或在其他集成服务器中单击等效按钮。那绝对应该做到!
或者,如果您正在使用最新版本的sbt启动器脚本,则只需添加即可-no-share
。
在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 {} +
我同意建议的很好的解决方案,就我个人而言,我作为gnu make任务包括一些细微的变化。
Makefile的内容:
clean:
find . -name target | xargs rm -fr
然后运行:
make clean
我喜欢使用Makefiles作为代码作为文档。