将插件的插件依赖添加为用户的插件依赖



我正在创建一个SBT插件,用于我公司的所有Scala项目。它是常用的 SBT 插件和可以在任何地方共享的通用配置的集合。我的插件使用例如sbt-release:配置凭据,设置发布过程,默认发布存储库等。所以我将其添加为插件依赖项

project/plugins.sbt

addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")

但是,我想向我的用户公开此插件,以便他们可以调用sbt release.目前我有以下代码:

build.sbt

sbtPlugin := true
/* common release configuration code */
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")

如果我删除最后一行,我的用户将无法调用sbt release。但是,我想避免两次声明依赖项。我能做得更好吗?

我采用了不同的方法,因为配置甚至没有以这种方式应用,它还解决了重复问题。我没有使用 sbt 文件,而是为插件创建了 Scala 文件,并在 build.sbt 中包含所需的插件依赖项。这样,您根本不需要将其添加到project/plugins.sbt

例:

build.sbt

sbtPlugin := true
addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")

src/main/scala/mycompany/MyReleaseConfigPlugin.scala

package mycompany
import sbt._
import Keys._
object MyReleaseConfigPlugin extends AutoPlugin {
  override def trigger: PluginTrigger = allRequirements
  override def requires = sbtrelease.ReleasePlugin
  /* common release configuration code example */
  import sbtrelease.ReleasePlugin.autoImport._
  import ReleaseTransformations._
  override lazy val projectSettings = Seq(
    releaseProcess := Seq[ReleaseStep](
      checkSnapshotDependencies,
      inquireVersions,
      runClean,
      setReleaseVersion,
      commitReleaseVersion,
      tagRelease,
      publishArtifacts),
    releaseIgnoreUntrackedFiles := false,
    publishMavenStyle := true,
    credentials += Credentials(
      "Artifactory Realm",
      "artifactory.mycompany.com",
      sys.env.get("REPO_USER").getOrElse(""),
      sys.env.get("REPO_PASS").getOrElse(""))
  )
}

最新更新