【问题标题】:sbt Task classpathsbt 任务类路径
【发布时间】:2012-04-07 21:28:02
【问题描述】:

我正在处理一个 sbt 任务,我想访问一些应用程序类和依赖项。 (具体来说,我想使用 scalaquery 生成数据库 DDL)

有没有办法将这些依赖项添加到任务中,或者我需要为此创建一个插件?

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

提前致谢

【问题讨论】:

  • 尝试将依赖添加到project/plugins.sbt

标签: scala sbt playframework-2.0


【解决方案1】:

您必须添加 ScalaQuery 以及您构建所依赖的所有其他内容作为构建依赖项。这意味着基本上,您必须将其添加为“作为 sbt 插件”。

这在 sbt wiki 的 Using Plugins 部分中有详细描述。不过,这一切都归结为一件非常简单的事情 - 只需在 project/plugins.sbt 下添加一行定义您的依赖项,如下所示:

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

现在,在构建中使用应用程序类的问题在于,您不能真正将构建产品添加为构建依赖项。 - 因此,您可能必须创建一个单独的项目来构建您的 DDL 模块,并将其作为依赖项添加到该项目的构建中。

【讨论】:

  • 抱歉这么久才发表评论,但我似乎无法在任务中使用源项目 scala 类(导入模型._ 不起作用)。知道那可能是什么吗?
  • 你是对的。如果您的构建依赖于您的应用程序类,那么您也必须将它们添加为构建依赖项。杂乱。我会调整我的答案...
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 2011-05-11
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2017-05-18
相关资源
最近更新 更多