如何以DRY方式过滤/禁用SBT中所有子项目的scalac选项

浮猫

我的项目有多个子项目,在这个项目中我使用sbt-tpolecat1我在代码中使用Java框架。该框架大量使用流利的接口,因此我需要在代码中禁止显示许多“废弃的非单位值”警告。

sbt-tpolecat提供了许多开箱即用的有用的scalac选项,我只想-Wvalue-discard在我的用例中排除scalac选项。

问题是我在这个项目中有4-5个子项目2现在,我需要将以下内容添加到每个子项目的中settings

sub_project_name.settings(
  scalacOptions ~= (_.filterNot(Set("-Wvalue-discard")))
)
// or
sub_project_name.settings(valueDiscardSetting)

lazy val valueDiscardSetting =
  Seq(scalacOptions ~= (_.filterNot(Set("-Wvalue-discard"))))

有没有办法以DRY方式在所有子项目中排除此选项?我当前的子项目层次结构与此类似:

App -> Frontend -> Common
    -> Backend  -> Common
马里奥·加里奇(Mario Galic)

常用设定值

在多项目构建中有一种常见的做法会排除常见设置

在val中定义一系列常用设置,并将其添加到每个项目中。更少的概念需要学习。

例如

lazy val commonSettings = Seq(
  scalacOptions ~= (_.filterNot(Set("-Wvalue-discard"))),
  ...
)

lazy val util = (project in file("util")).settings(commonSettings)
lazy val core = (project in file("core")).settings(commonSettings)

常用设置自动插件

自动插件可以为每个项目设置设置。在下面创建以下小插件project/CommonSettingsPlugin.scala

object CommonSettingsPlugin extends AutoPlugin {
  override def requires = plugins.JvmPlugin
  override def trigger = allRequirements
  override lazy val projectSettings = Seq(
    scalacOptions ~= (_.filterNot(Set("-Wvalue-discard")))
  )
}

覆盖

override def requires = plugins.JvmPlugin

要切实启用该插件,而无需显式调用enablePluginbuild.sbt

覆盖设置 onLoad

onLoad 在构建并加载所有项目之后,最后发生。

lazy val settingsAlreadyOverridden = SettingKey[Boolean]("settingsAlreadyOverridden","Has overrideSettings command already run?")
settingsAlreadyOverridden := false
commands += Command.command("removeScalacOptions") { state =>
  if (settingsAlreadyOverridden.value) {
    state
  } else {
    Project.extract(state).appendWithSession(
      Seq(
        settingsAlreadyOverridden := true,
        scalacOptions ~= (_.filterNot(Set("-Wvalue-discard")))
      ),
      state
    )
  }
}

onLoad in Global := (onLoad in Global).value andThen ("removeScalacOptions" :: _)

还要考虑他们如何通过社区解决问题removeScalacOptions

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何以DRY方式过滤/禁用SBT中所有子项目的scalac选项

来自分类Dev

如何在具有多个子项目的SBT项目中覆盖子项目中的设置

来自分类Dev

禁用sbt子项目doc生成

来自分类Dev

如何在sbt构建的所有子项目中临时更改scalaVersion?

来自分类Dev

如何使SBT子项目具有多个Scala版本?

来自分类Dev

如何依赖Github的多模块SBT项目的子项目

来自分类Dev

如何依赖Github的多模块SBT项目的子项目

来自分类Dev

如何以编程方式禁用Magento中所有商店视图的产品?

来自分类Dev

如何在sbt shell中设置子项目的设置(不使用project命令)?

来自分类Dev

子项目的sbt运行失败,并显示“协议错误”

来自分类Dev

在列表中查找包含所有子项目的项目

来自分类Dev

是否有所有春季子项目的清单

来自分类Dev

如何以编程方式使用Java获取jenkins中所有项目/职位的列表?

来自分类Dev

在所有子项目之后执行SBT运行任务

来自分类Dev

sbt控制台-为所有子项目设置scala版本

来自分类Dev

Gradle-创建所有子项目的Tar

来自分类Dev

我可以使用Gradle获取所有子项目的依赖关系树吗?

来自分类Dev

sbt 子项目:dependsOn

来自分类Dev

如何在Maven中创建多模块项目?这样子项目的所有代码库都可以放在父项目中

来自分类Dev

带有独立子项目的CMake项目

来自分类Dev

如何使用drifferent gradle多项目的子项目

来自分类Dev

带有sbt子项目的scala.io.source.fromFile从根资源文件夹读取

来自分类Dev

播放子项目:如何转换为build.sbt

来自分类Dev

播放子项目:如何转换为build.sbt

来自分类Dev

如何在SBT中管理可变的子项目位置?

来自分类Dev

如何使函数/子项目可用于项目中的所有表单?

来自分类Dev

如何在gradle中的所有子项目之前先执行根项目

来自分类Dev

Angular8 如何以良好的实践方式加载子项目资产文件夹中的资源?

来自分类Dev

如何获取列表中子项目的ID?

Related 相关文章

  1. 1

    如何以DRY方式过滤/禁用SBT中所有子项目的scalac选项

  2. 2

    如何在具有多个子项目的SBT项目中覆盖子项目中的设置

  3. 3

    禁用sbt子项目doc生成

  4. 4

    如何在sbt构建的所有子项目中临时更改scalaVersion?

  5. 5

    如何使SBT子项目具有多个Scala版本?

  6. 6

    如何依赖Github的多模块SBT项目的子项目

  7. 7

    如何依赖Github的多模块SBT项目的子项目

  8. 8

    如何以编程方式禁用Magento中所有商店视图的产品?

  9. 9

    如何在sbt shell中设置子项目的设置(不使用project命令)?

  10. 10

    子项目的sbt运行失败,并显示“协议错误”

  11. 11

    在列表中查找包含所有子项目的项目

  12. 12

    是否有所有春季子项目的清单

  13. 13

    如何以编程方式使用Java获取jenkins中所有项目/职位的列表?

  14. 14

    在所有子项目之后执行SBT运行任务

  15. 15

    sbt控制台-为所有子项目设置scala版本

  16. 16

    Gradle-创建所有子项目的Tar

  17. 17

    我可以使用Gradle获取所有子项目的依赖关系树吗?

  18. 18

    sbt 子项目:dependsOn

  19. 19

    如何在Maven中创建多模块项目?这样子项目的所有代码库都可以放在父项目中

  20. 20

    带有独立子项目的CMake项目

  21. 21

    如何使用drifferent gradle多项目的子项目

  22. 22

    带有sbt子项目的scala.io.source.fromFile从根资源文件夹读取

  23. 23

    播放子项目:如何转换为build.sbt

  24. 24

    播放子项目:如何转换为build.sbt

  25. 25

    如何在SBT中管理可变的子项目位置?

  26. 26

    如何使函数/子项目可用于项目中的所有表单?

  27. 27

    如何在gradle中的所有子项目之前先执行根项目

  28. 28

    Angular8 如何以良好的实践方式加载子项目资产文件夹中的资源?

  29. 29

    如何获取列表中子项目的ID?

热门标签

归档