Sbt 自动插件覆盖项目设置

博尔哈·洛伦特·埃斯科巴

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

// 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!")
}

任何帮助表示赞赏。

sjrd

你真的不想使用addSettings,因为

  1. 它可能会破坏构建中所有其他 AutoPlugins的行为,并且,
  2. 无论如何,它已经在 sbt 1.x 中消失了(出于上述原因,我敢打赌)

AutoPlugins 不应该覆盖项目中的设置。项目应该始终对自己的设置拥有最终决定权,这样才有意义。

您可以scalacOptions通过使用+=代替:=(在插件项目中)轻松完成该部分一般来说,您几乎永远不应该使用:=Seq-settings,scalacOptions尤其是。

override def projectSettings = Seq(
    scalacOptions += "-Yrangepos"
)

对于scalaVersion,好吧,如果项目明确设置scalaVersion,则您AutoPlugin无能为力来否决它。而且应该做不到。但是,如果项目未scalaVersion在项目级别(但可能在in ThisBuild级别)定义,则您可以获得所需的效果

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

IDEA sbt插件无法自动导入Predef

来自分类Dev

如何列出SBT项目中的活动插件?

来自分类Dev

Sbt插件,默认文件设置密钥

来自分类Dev

sbt-scalariform插件-无法解析设置

来自分类Dev

将资源添加到特定于项目的 SBT 自动插件

来自分类Dev

如何测试SBT插件

来自分类Dev

SBT Scala Assembly插件

来自分类Dev

测试 sbt 插件

来自分类Dev

从sbt运行Play项目

来自分类Dev

SBT项目导航

来自分类Dev

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

来自分类Dev

sbt多项目未定义设置

来自分类Dev

如何在SBT中设置blueeyes项目?

来自分类Dev

sbt多项目未定义设置

来自分类Dev

设置SBT的堆栈大小

来自分类Dev

从 ModuleID 获取 SBT 设置

来自分类Dev

如何在插件自己的项目中使用SBT插件?

来自分类Dev

SBT插件,添加了插件

来自分类Dev

SBT,本地sbt插件,使用jooq代码生成插件

来自分类Dev

SBT插件%%%在哪里定义?

来自分类Dev

SBT自动插件和带有“ dependsOn”的任务修改

来自分类Dev

使用SBT添加工件以播放项目-Native Packager插件

来自分类Dev

在sbt中的同一项目下添加插件

来自分类Dev

如何在多个项目之间共享sbt插件配置?

来自分类Dev

如何在我的Scala项目中“嵌入” SBT插件

来自分类Dev

在SBT中添加sbt本机打包程序插件

来自分类Dev

从子项目引用sbt根项目中的设置

来自分类Dev

在Scala中将模块项目设置为sbt项目?

来自分类Dev

自定义SBT任务的覆盖派生设置