加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在sbt中,如何在所有配置中覆盖控制台的scalacOptions?

发布时间:2020-12-16 09:15:23 所属栏目:安全 来源:网络整理
导读:我喜欢在顶层定义 scalacOptions(如现在忽略项目轴): scalacOptions += "-Ywarn-unused-import" 但是后来我意识到这对控制台来说太严格了.所以我试过设置: scalacOptions in console ~= (_ filterNot (_ == "-Ywarn-unused-import")) 但是这并不奏效(REPL
我喜欢在顶层定义 scalacOptions(如现在忽略项目轴):

scalacOptions += "-Ywarn-unused-import"

但是后来我意识到这对控制台来说太严格了.所以我试过设置:

scalacOptions in console ~= (_ filterNot (_ == "-Ywarn-unused-import"))

但是这并不奏效(REPL中仍然有(致命的)警告).

我用检查来试着理解为什么:

> inspect console
[info] Task: Unit
[info] Description:
[info]  Starts the Scala interpreter with the project classes on the classpath.
[info] Provided by:
[info]  {file:/a/}b/compile:console
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:261
[info] Dependencies:
[info]  compile:console::compilers
[info]  compile:console::initialCommands
[info]  compile:console::fullClasspath
[info]  compile:console::taskTemporaryDirectory
[info]  compile:console::scalaInstance
[info]  compile:console::streams
[info]  compile:console::cleanupCommands
[info]  compile:console::scalacOptions
[info] Delegates:
[info]  compile:console
[info]  *:console
[info]  {.}/compile:console
[info]  {.}/*:console
[info]  */compile:console
[info]  */*:console
[info] Related:
[info]  test:console

注意:控制台是

>由编译提供:console
>依赖于编译:console :: scalacOptions

然后:

> inspect compile:console::scalacOptions
[info] Task: scala.collection.Seq[java.lang.String]
[info] Description:
[info]  Options for the Scala compiler.
[info] Provided by:
[info]  {file:/a/}b/compile:scalacOptions
[info] Defined at:
[info]  (sbt.Classpaths) Defaults.scala:1593
[info] Reverse dependencies:
[info]  compile:console
[info] Delegates:
[info]  compile:console::scalacOptions
[info]  compile:scalacOptions
[info]  *:console::scalacOptions
[info]  *:scalacOptions
[info]  {.}/compile:console::scalacOptions
[info]  {.}/compile:scalacOptions
[info]  {.}/*:console::scalacOptions
[info]  {.}/*:scalacOptions
[info]  */compile:console::scalacOptions
[info]  */compile:scalacOptions
[info]  */*:console::scalacOptions
[info]  */*:scalacOptions
[info] Related:
[info]  *:console::scalacOptions
[info]  compile:scalacOptions
[info]  *:scalacOptions
[info]  */*:scalacOptions
[info]  test:scalacOptions

注意:compile:console :: scalacOptions是

>由编译提供:scalacOptions
>在代理链中没有达到*:console :: scalacOptions(这是我定义的)

我的问题是如何覆盖控制台的所有配置的scalacOptions?是否有可能改变代理链?

我想避免在(编译,控制台)中设置scalacOptions(因为它将被重复(Test,console))或定义一个valac选项.

解决方法

My question is how do I override scalacOptions for all configurations for console?

我不认为我们可以给出编译的存在:由sbt的默认值提供的scalacOptions.具有较高优先级的唯一范围是编译:console :: scalacOptions.
在大多数情况下,不希望“编译和测试”设置进行交叉连接,因此配置范围更高的优先级,我认为是不正确的默认值.

lazy val commonSettings = Seq(
  scalaVersion := "2.11.4",scalacOptions += "-Ywarn-unused-import",scalacOptions in (Compile,console) ~= (_ filterNot (_ == "-Ywarn-unused-import")),scalacOptions in (Test,console) := (scalacOptions in (Compile,console)).value
)

Is it possible to change the delegation chain?

不,这是不可能的.
BuildStructure中有一个代理功能实例,它在加载时被初始化,用于所有任务.
订货在Scope.delegates完成.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读