插件在SBT中编译订单

时间:2016-09-19 18:25:15

标签: scala sbt

我正在尝试创建一个SBT插件,为我的组织的项目提供常见的插件和设置(类似于Maven父POM)。 由于大多数这些设置也应该存在于commons项目本身中,我将这些源添加为plugins.sbt中的unmanagedSourceDirectories,因此我为正确的项目定义的自动插件也存在于元项目中(我采取了一个巧妙的技巧)来自sbt-release插件)。

事情很好,除了我需要复制addSbtPlugin条目时,我想要一个插件用于展示我的正确项目和元项目。如果我不这样做,我的正确项目将无法编译,因为没有加载插件的类。

我尝试将所有共享插件依赖项移动到一个单独的autoplugin,假设SBT会编译它并将库依赖项添加到元项目中,这样当我的常用插件编译时它们就会存在,但它不起作用。 / p>

我想理解为什么这会失败,并且如果思考者有某种方式使用编译顺序以某种方式使其工作。如果没有,我很乐意听到你们知道的任何替代方案,以避免维护我所有共享插件的重复版本。

以下是我的代码的简化版本:

项目结构

/common
 |-build.sbt
 |-/project
 |  |-plugins.sbt
 |-/src/main/scala/package
    |-Dependencies.scala
    |-MyCommonPlugin.scala

build.sbt

sbtPlugin := true
name := "common"

plugins.sbt

unmanagedSourceDirectories in Compile += baseDirectory.value.getParentFile / "src" / "main" / "scala"

Dependencies.scala

import sbt._
import sbt.Keys._

//Plugins I intend to share between build.sbt and plugins.sbt
object Dependencies extends AutoPlugin {
  override def trigger = allRequirements
  override lazy val projectSettings = super.projectSettings ++ Seq(
    addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.8.5")
  )
}

MyCommonPlugin.scala

import sbt._
import sbt.Keys._

//this import fails! object sbt is not a member of package com.typesafe
import com.typesafe.sbt.GitBranchPrompt.{ projectSettings => gitBranchPromptSettings }

object MyCommonPlugin extends AutoPlugin {
  override def trigger = allRequirements
  override lazy val projectSettings =
    super.projectSettings ++
    gitBranchPromptSettings ++
    Seq(
      // My common settings
    )
}

要使此代码正常工作,我需要在plugins.sbt上重复addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.8.5")

0 个答案:

没有答案