一种简单的方法来摆脱SBT产生的“一切”?


81

有没有简单的方法可以消除执行SBT构建后生成的所有内容?事实证明,它到处都会创建目标目录。表演

sbt clean clean-cache clean-lib clean-plugins

...并不能摆脱一切。


我也很想看看并提交了一张票:code.google.com/p/simple-build-tool/issues/detail?id=166
Landon Kuhn,

该问题跟踪程序已不再使用,因此我在这里重新提交了该文件:github.com/sbt/sbt/issues/896
Robin Green

Answers:


69

在具有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命令时是否需要具有标志?似乎是不必要的,并且可能是不安全的。
取消取消'17

这对我来说效果很好:find . -name target -type d -exec rm -r {} \;
取消取消

不需要'rm'命令的“ -f”部分,但是在某些系统上,它可能比一长串的删除确认更为可取。
RudeDude

3
@AlbertBikeev:也许sbt clean cleanFiles对您有用
serv-inc

2
sbt clean cleanFiles
frostcs

6

显然,这对于在诸如Jenkins之类的集成服务器上可复制的构建非常重要!

通过向sbt提供这样的命令行参数,确保所有文件(包括常春藤缓存)都存储在集成服务器工作空间中:

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

然后在Jenkins中单击“擦除工作区”按钮,或在其他集成服务器中单击等效按钮。那绝对应该做到!

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


如果您已经在使用Jenkins,则清理插件是确保清除工作区的绝佳选择
ecoe19年

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

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

Makefile的内容:

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

然后运行:

make clean

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.