scala – 如何在多个项目之间共享sbt插件配置?
我们有许多较小的sbt项目,我们希望将它们分开(没有多项目构建).但是,我们希望在构建之间共享配置.为了做到这一点,我们目前还有另一个项目,所有项目都在项目/项目/ Build.
scala文件中用作库依赖项.我们能够通过这种方式仅使用内置的sbt功能集中构建配置.
我们还没想到的是如何集中插件特定的构建配置.例如,我们对我们的几个服务使用sbt-assembly.我们正在调整程序集mergeStrategy,并希望在所有项目中使用它.我们如何重新使用配置? 另外,我们如何自动为我们的所有构建提供某些sbt-plugins,例如汇编或标量插件,而无需手动将其添加到每个构建中? 解决方法
这是我们为自动插件考虑的使用模式之一.
自动插件可以依赖于sbt-assembly或sbt-scalariform,并自动将设置引入所有项目. build.sbt sbt-your-company可以在build.sbt中包含sbt-scalariform作为库依赖项,如下所示: lazy val commonSettings = Seq( organization := "com.example",version := "0.1.0" ) lazy val root = (project in file(".")). settings( commonSettings ++ addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.3.0") : _*). settings( sbtPlugin := true,name := "sbt-your-company",// other settings here ) 由于addSbtPlugin(…)通常只出现在project / plugins.sbt中,这可能有点奇怪,但是如果你看一下addSbtPlugin的实现基本上是带有一些额外属性的libraryDependencies: def addSbtPlugin(dependency: ModuleID): Setting[Seq[ModuleID]] = libraryDependencies <+= (sbtBinaryVersion in update,scalaBinaryVersion in update) { (sbtV,scalaV) => sbtPluginExtra(dependency,sbtV,scalaV) } 的src /主/阶/富/ houserules / FormatPlugin.scala 自动插件添加的功能之一是能够基于其他插件触发插件.通过基于plugins.JvmPlugin触发插件,您可以有效地创建默认启用的插件.这是一个名为FormatPlugin的示例插件: package foo package houserules import sbt._ import Keys._ import com.typesafe.sbt.SbtScalariform.{ ScalariformKeys => sr,_ } object FormatPlugin extends AutoPlugin { override def requires = plugins.JvmPlugin override def trigger = allRequirements override def projectSettings: Seq[Def.Setting[_]] = baseSettings lazy val baseSettings: Seq[Setting[_]] = scalariformSettings ++ Seq( sr.preferences := formatPrefs ) def formatPrefs = { import scalariform.formatter.preferences._ FormattingPreferences().setPreference(AlignSingleLineCaseStatements,true) } } 这个插件引入了sbt-scalariform的scalariformSettings和自定义格式首选项. 用法 您所要做的就是将sbt-your-company包含在您的构建中. 有关完整示例,另请参阅我刚刚创建的sbt-houserules. (巧合的是,我一直想为sbt模块化创建它.) 内部插件的其他用法 您还可以使用自动插件来配置其他内容,例如Akka版本的公共库版本,或者排除所有日志记录库等. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |