sbt Task classpath - PullRequest
       9

sbt Task classpath

9 голосов
/ 23 марта 2012

Я работаю над задачей sbt и хотел бы получить доступ к некоторым классам и зависимостям приложения. (В частности, я хотел бы сгенерировать DDL базы данных, используя scalaquery)

Есть ли способ добавить эти зависимости в задачу или, может быть, мне нужно создать плагин для этого?

object ApplicationBuild extends Build {

  val appName = "test"
  val appVersion = "1.0-SNAPSHOT"

  val appDependencies = Seq(
    "org.scalaquery" % "scalaquery_2.9.0-1" % "0.9.5")

  val ddl = TaskKey[Unit]("ddl", "Generates the ddl in the evolutions folder")

  val ddlTask = ddl <<= (baseDirectory, fullClasspath in Runtime) map { (bs, cp) =>
    val f = bs / "conf/evolutions/default" 

    // Figures out the last sql number used
    def nextFileNumber = { ... }

    //writes to file
    def printToFile(f: java.io.File)(op: java.io.PrintWriter => Unit) { ...}

    def createDdl = {
      import org.scalaquery.session._
      import org.scalaquery.ql._
      import org.scalaquery.ql.TypeMapper._

      import org.scalaquery.ql.extended.H2Driver.Implicit._
      import org.scalaquery.ql.extended.{ ExtendedTable => Table }
      import models._
      printToFile(new java.io.File(nextFileNumber, f))(p => {
          models.Table.ddl.createStatements.foreach(p.println)
      });
    }
    createDdl
    None
  }

  val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings(
    ddlTask)

}

Я получаю ошибку

[test] $ reload
[info] Loading global plugins from /home/asal/.sbt/plugins
[info] Loading project definition from /home/asal/myapps/test/project
[error] /home/asal/myapps/test/project/Build.scala:36: object scalaquery is not a member of package org
[error]       import org.scalaquery.session._
[error]                  ^
[error] one error found

Заранее спасибо

1 Ответ

6 голосов
/ 24 июля 2012

Вы должны добавить ScalaQuery, и все остальное зависит от вашей сборки.Это означает, что в основном вы должны добавить его «как плагин sbt».

Это подробно описано в разделе Использование плагинов в вики sbt.Однако все сводится к очень простой вещи - просто добавьте строку, определяющую вашу зависимость, под project/plugins.sbt следующим образом:

libraryDependencies += "org.scalaquery" % "scalaquery_2.9.0-1" % "0.9.5"

Теперь проблема с использованием классов приложений в сборке заключается в том, что вы можетена самом деле не добавлять продукты сборки как зависимости сборки.- Таким образом, вам, вероятно, придется создать отдельный проект, который собирает ваш модуль DDL, и добавить его в качестве зависимости к сборке этого проекта.

...