构建自定义SBT插件,获取错误:对象sbt不是包com.typesafe

时间:2016-02-22 21:19:20

标签: scala sbt

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: _*)

1 个答案:

答案 0 :(得分:0)

我需要确保GitVersioning插件不仅可用于构建过程,还可以用于我的插件。

build.sbt,我补充道:

addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.8.5")

执行此操作后,我的插件可以使用sbt-git