2016-02-22 2 views
0

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

Я думаю, что вам не хватает 'sbtPlugin: = true' в вашем файле build.sbt –

+0

@ m-z У меня есть' sbtPlugin: = true' в 'build.sbt', но не размещал содержимое файла. Я сейчас обновился. –

+0

(на всякий случай), вы действительно добавили плагин как зависимость в конфигурацию sbt или плагинов? –

ответ

0

Мне нужно было убедиться, что плагин GitVersioning был доступен не только для процесса сборки, но и для моего плагина.

Для build.sbt, я добавил:

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

При этом, sbt-git был доступен мой плагин.

+0

У вас есть выделенный файл для добавления плагинов с именем 'plugins.sbt' в каталог проекта –

Смежные вопросы