84

有没有一种简单的方法可以摆脱由于执行 SBT 构建而生成的所有内容?事实证明,它会在各处创建目标目录。表演

sbt clean clean-cache clean-lib clean-plugins

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

4

4 回答 4

72

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

当前可以工作并清理几乎所有内容的 SBT 命令是:

sbt clean clean-files

这将删除顶级“target”和“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"
于 2014-07-25T14:32:54.423 回答
7

显然,这对于在 Jenkins 等集成服务器上的可重现构建非常重要!

通过向 sbt 提供如下命令行参数,确保所有文件(包括 ivy 缓存)都存储在集成服务器工作区中:

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

然后单击 Jenkins 中的清除工作区按钮,或其他集成服务器中的等效项。那绝对应该这样做!

或者,如果您使用的是最新版本的 sbt 启动器脚本,您可以简单地添加-no-share

于 2013-10-02T17:59:21.050 回答
5

在 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 find(例如在 Mac OS X 上),命令将是:

find -E . -regex \.(/project)*/target -exec rm -r {} +
于 2015-02-21T03:28:02.617 回答
2

我同意建议的非常好的解决方案,我个人在 gnu make 任务中包含了一些细微的变化。

Makefile的内容:

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

然后运行:

make clean

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

于 2019-03-01T13:07:40.270 回答