2012-03-23 15 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) 

} 

私が手にエラーがあなたのビルドはビルド依存関係として依存ScalaQueryと他のすべてを追加する必要があり、事前

+4

依存関係を 'project/plugins.sbt'に追加してみてください。 – leedm777

答えて

5

[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 

おかげです。つまり、基本的には、それを「sbtプラグインとして」追加する必要があります。

これは、sbt wikiのUsing Pluginsセクションで詳しく説明されています。それはすべての非常に単純なことに帰着、しかし - ちょうどこのようproject/plugins.sbtの下であなたの依存関係を定義する行を追加します。

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

さて、ビルドにアプリケーションクラスを使用しての問題は本当にあなたができないということですビルド製品をビルドの依存関係として追加します。 - おそらく、DDLモジュールをビルドする別のプロジェクトを作成し、それをこのプロジェクトのビルドに依存として追加する必要があります。

+0

あまりにも長い間コメントを残して申し訳ありませんが、タスクのソースプロジェクトスカラクラスを使用することができないようです(そのインポートmodels._は機能しません)。それはどういう考えですか? – mericano1

+0

あなたは正しいです。あなたのアプリケーションクラスがあなたのアプリケーションクラスに依存する場合は、それらをビルド依存関係として追加する必要があります。メッシー。私は私の答えに適応します... –