tl; dr 我正在尝试使用自定义插件a)自动使用它来插入GitVersioning插件,以及b)可以访问git.baseVersion
等变量。以最好的方式做到这一点,我知道如何给我导入错误。
我正在尝试编写一个自定义插件,类似于one here。
我的BaseSettingsPlugin.scala
看起来像是:
package com.sp.sbt
import sbt.Keys._
import com.typesafe.sbt.GitVersioning
import sbt._
/**
* Provides base settings for all of our projects
*/
object BaseSettingsPlugin extends AutoPlugin {
/**
* Defines all settings/tasks that get automatically imported,
* when the plugin is enabled
*/
object autoImport {
lazy val libraryVersions = settingKey[Map[Symbol, String]]("Common versions to be used for dependencies")
}
import autoImport._
// allow the plug-in to be included automatically
override def trigger: PluginTrigger = allRequirements
override def requires = GitVersioning
/**
* Provide default settings
*/
override def projectSettings: Seq[Setting[_]] = Seq(
scalaVersion := "2.11.7",
organization := "com.sp",
libraryVersions := Map(
'bijection -> "0.8.1",
'elastic4s -> "1.7.4",
'ficus -> "1.1.2",
'finatra -> "2.1.0",
'hikari -> "2.4.1",
'h2 -> "1.4.189",
'mysql -> "5.1.36",
'redis -> "6.29.0",
'scala -> scalaVersion.value,
'scalatest -> "2.2.3",
'scoverage -> "1.1.1",
'slick -> "3.1.1",
'slickJoda -> "2.1.0",
'specs2 -> "2.3.13",
'swagger -> "0.3.0",
'typesafe -> "1.3.0"
)
)
}
当我尝试构建自定义插件时,收到以下错误消息:
[error] BaseSettingsPlugin.scala:10: object sbt is not a member of package com.typesafe
[error] import com.typesafe.sbt.GitVersioning
[error] ^
[error] BaseSettingsPlugin.scala:40: not found: value GitVersioning
[error] override def requires = GitVersioning
由于导入语句失败,可能会出现第二条错误消息。
如果我将import com.typesafe.sbt.GitVersioning
移动到我的build.sbt
文件,我不会再收到导入错误,但我会继续收到第二个(未找到)错误。
我真正想要做的就是让我可以在自定义插件中使用以下代码块:
git.useGitDescribe := true, // if this is true, then it uses the version number suggested by $> git describe
// if this is false, it combines the baseVersion and the commit hash of the current commit
git.baseVersion := "0.0.0",
git.gitUncommittedChanges := false,
git.gitTagToVersionNumber := {
case VersionRegex(v,"") => Some(v)
case VersionRegex(v,"SNAPSHOT") => Some(s"$v-SNAPSHOT")
case VersionRegex(v,s) => Some(s"$v-$s-SNAPSHOT")
case _ => None
}
另外,为了澄清,这里是build.sbt
// we hide the existing definition for setReleaseVersion to replace it with our own
import sbtrelease.ReleaseStateTransformations.{setReleaseVersion=>_,_}
import com.typesafe.sbt.GitVersioning
sbtPlugin := true
scalaVersion := "2.10.4" // This overrides the scalaVersion from BaseSettingsPlugin
name := "base-settings"
libraryDependencies <++= libraryVersions { v => Seq(
"org.scala-lang" % "scala-compiler" % v('scala),
"org.scala-lang" % "scala-library" % v('scala),
"com.typesafe" % "config" % v('typesafe)
)}
lazy val root = project
.in(file("."))
.enablePlugins(GitVersioning)
.settings(packageSettings: _*)
答案 0 :(得分:0)
我需要确保GitVersioning插件不仅可用于构建过程,还可以用于我的插件。
至build.sbt
,我补充道:
addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.8.5")
执行此操作后,我的插件可以使用sbt-git
。