scala - SBT scalariform 插件多次格式化相同的东西,可以做一次吗?
问题描述
SBT scalariform 插件在多项目设置中多次格式化文件。这是示例https://github.com/Seetaramayya/sbt-scalariform-example
如果您编译项目,您可以在控制台中看到类似的内容
[info] Formatting 5 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "root")(compile) ...
[info] Formatting 7 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "module1")(compile) ...
[info] Formatting 7 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "module2")(compile) ...
[info] Formatting 7 Scala sources ProjectRef(uri("file:/Users/seeta/projects/github/sbt-multi-scalariform/example/"), "main")(compile) ...
代码库中有 5 个 scala 文件和 2 个 sbt 文件。在 SBT 和 scalariform 文档中,我都找不到如何在多模块设置中只执行一次任务。
我只想执行一次任务。disablePlugins
我看到的唯一选项是在根项目级别启用插件并在子项目中禁用,但我不喜欢该选项(我需要添加15
子项目)
解决方案
问题似乎是
每个子项目
scalariformFormat
在其不同范围内的任务在其sourceDirectories
设置中都有项目根。这只会导致整个项目被爬取以获取 scala 源并格式化与子项目一样多的次数。
并已通过设置解决scalariformWithBaseDirectory
val scalariformWithBaseDirectory = settingKey[Boolean]("Whether or not to format sources in project root (default: false)")
因此设置withBaseDirectory=false
应该.scalariform.conf
给出输出
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "main")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module1")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module2")(compile) ...
但是请注意,这不会格式化*.scala
根project/
目录中的源。为了解决这个问题,我们可以尝试保留withBaseDirectory=false
但.conf
像这样为根项目打开它
lazy val root = (project in file("."))
.aggregate(module1, module2, main)
.settings(scalariformWithBaseDirectory := true)
哪个输出
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module2")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "module1")(compile) ...
[info] Formatting 1 Scala source ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "main")(compile) ...
[info] Formatting 5 Scala sources ProjectRef(uri("file:/Users/mario_galic/code/stackoverflow/sbt-scalariform-example/"), "root")(compile) ...
我们仍然会得到重复,但不像最初那样多。
推荐阅读
- javascript - 使用运行类型进行类型检查
- javascript - Wordpress ajax 处理函数不运行(javascript 导致成功)
- reactjs - 无法在反应中使用“this”关键字?
- angular - 如何在 iframe 中设置 blob pdf 文件名?
- javascript - 如何在javascript的forEach方法中更改索引步骤?
- docker - jenkins 管道脚本中 docker 容器的 if else 条件
- plantuml - PlantUML 状态机控制箭头方向到自身布局
- python - UnicodeDecodeError:“utf-8”编解码器无法解码位置 1551 中的字节 0x87:无效的起始字节
- objective-c - 自定义 NSTableViewCell 在 NSTableView 中显示时未对齐
- curl - curl 给出一个空的响应