首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于覆盖项目设置的Sbt自动插件

用于覆盖项目设置的Sbt自动插件
EN

Stack Overflow用户
提问于 2017-10-27 12:11:01
回答 1查看 827关注 0票数 0

我正在尝试开发一个非常小的自动插件来覆盖所有项目和子项目的本地配置。具体来说,我希望我的插件改变scalaVersion,并在包含它的项目的scalacOptions中添加一个选项。我在文件里读过表示可以更改设置的分配顺序,但我似乎没有将它们分配给正确的项目。这是我到目前为止掌握的代码:

代码语言:javascript
复制
// build.sbt 
import AddSettings._ 

lazy val root = (project in file(".")) 
  .settingSets(userSettings, defaultSbtFiles, autoPlugins, buildScalaFiles)
  .settings( 
     sbtPlugin := true, 
     name := "sbt-scalafix-config",
     organization := "io.prl-prg", 
     version := "0.0.1", 
     addSbtPlugin("org.some" % "some-other-plugin" % "0.5.3")
   ) 

// PluginCode.scala 

package config 
import sbt._ 
import sbt.Keys._ 

object PluginCode extends AutoPlugin {
  override def trigger = allRequirements 
  override lazy val projectSettings = Seq(
    scalaVersion := "2.12.3", 
    scalacOptions := Seq( "-Yrangepos" )
  )
  println("[PluginCode Setup] Hello World!")
}

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 13:20:11

您真的不想使用addSettings,因为

  1. 它可能会破坏构建中所有其他AutoPlugin的行为,
  2. 它已经在SBT1.x中消失了(出于上述原因,我敢打赌)

AutoPlugin不应该覆盖项目中的设置。项目应该始终对自己的设置有最终决定权,所以这是有意义的。

通过使用scalacOptions而不是:= (在插件和项目中),您可以轻松地完成+=部分。一般来说,您实际上不应该在Seq-设置中使用:=,特别是scalacOptions

代码语言:javascript
复制
override def projectSettings = Seq(
    scalacOptions += "-Yrangepos"
)

对于scalaVersion,如果项目显式地设置了scalaVersion,那么您的AutoPlugin就无法阻止它。而且它不应该。但是,如果项目没有在项目级别定义scalaVersion (但可能在in ThisBuild级别),则可以获得所需的效果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46974733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档