2012-03-23 99 views
8

我正在處理一個sbt任務,我想訪問一些應用程序類和依賴項。 (具體來說,我想用scalaquery生成數據庫DDL)sbt任務類路徑

有什麼辦法可以將這些依賴關係添加到任務中,或者我需要爲此創建一個插件?

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 

在此先感謝

+4

嘗試添加依賴到'project/plugins.sbt'。 – leedm777 2012-03-23 14:03:07

回答

5

您必須添加ScalaQuery和其他一切您的構建依賴於構建依賴。這意味着基本上,你必須添加它「作爲一個插件」。

這在sbt wiki的Using Plugins部分有詳細描述。這一切都歸結到一個很簡單的事情,但 - 只需添加一行定義你的依賴project/plugins.sbt下是這樣的:

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

現在,在構建使用應用程序類的問題是,你不能真正將構建產品添加爲構建依賴項。 - 所以,你可能不得不創建一個單獨的項目來構建你的DDL模塊,並將其作爲依賴添加到這個項目的構建中。

+0

很抱歉,經過這麼久的評論,但我似乎無法使用任務中的源項目scala類(導入models._不起作用)。任何想法可能是什麼? – mericano1 2012-11-23 01:29:08

+0

你說得對。如果你的構建依賴於你的應用程序類,你也必須將它們作爲構建依賴項添加。亂。我會適應我的答案... – 2012-11-23 10:40:54