tl; dr Я пытаюсь создать свой собственный плагин a) автоматически вытаскивать с ним плагин GitVersioning и b) иметь доступ к таким переменным, как git.baseVersion
. Выполняя это, я знаю, как мне импортировать ошибки.Построение пользовательского плагина SBT, получение ошибки: объект sbt не входит в пакет com.typesafe
Я пытаюсь написать пользовательский плагин, аналогичный 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: _*)
Я думаю, что вам не хватает 'sbtPlugin: = true' в вашем файле build.sbt –
@ m-z У меня есть' sbtPlugin: = true' в 'build.sbt', но не размещал содержимое файла. Я сейчас обновился. –
(на всякий случай), вы действительно добавили плагин как зависимость в конфигурацию sbt или плагинов? –