2012-02-19 20 views
5

複数のアンマネージディレクトリを持つ可能性のあるプロジェクトをビルドするにはSBTを取得しようとしています。私は単一のディレクトリを持っていた場合、私はこのようにそれを簡単に行うことができます:SBTの.scalaプロジェクト構成の複数のアンマネージディレクトリからjarを追加するにはどうすればいいですか

unmanagedBase := file("custom-libs").getAbsoluteFile 

しかし、私は管理対象外の瓶を持つ2つのディレクトリを持っているので、私はそれらすべてを追加できるようにする必要があります。私はいくつかの情報を見つけましたin here、しかしまだ私のフル.scalaファイルビルドのために有用に見えません。

私は問題in hereを示す簡単なプロジェクトを作成しました。以下は私のBuild.scalaファイルです。

UPDATEは

私はいくつかの助けフォームsbt-users listを持って、正しく非管理瓶を定義することができましたが、コードはまだコンパイルされません(ただし、SBTショー非管理瓶が正しく表示されます)。

import sbt._ 
import com.github.siasia._ 
import PluginKeys._ 
import Keys._ 

object Build extends sbt.Build { 

    import Dependencies._ 

    val unmanagedListing = unmanagedJars := { 
    Dependencies.listUnmanaged(file(".").getAbsoluteFile) 
    } 

    lazy val myProject = Project("spray-template", file(".")) 
    .settings(WebPlugin.webSettings: _*) 
    .settings(port in config("container") := 8080) 
    .settings(
     organization := "com.example", 
     version  := "0.9.0-RC1", 
     scalaVersion := "2.9.1", 
     scalacOptions := Seq("-deprecation", "-encoding", "utf8"), 
     resolvers  ++= Dependencies.resolutionRepos, 
     libraryDependencies ++= Seq(
     Compile.akkaActor, 
     Compile.sprayServer, 
     Test.specs2, 
     Container.jettyWebApp, 
     Container.akkaSlf4j, 
     Container.slf4j, 
     Container.logback 
    ), 
     unmanagedListing 
    ) 

} 

object Dependencies { 
    val resolutionRepos = Seq(
    ScalaToolsSnapshots, 
    "Typesafe repo" at "http://repo.typesafe.com/typesafe/releases/", 
    "spray repo" at "http://repo.spray.cc/" 
) 

    def listUnmanaged(base : RichFile) : Keys.Classpath = { 
    val baseDirectories = (base/"custom-libs") +++ (base/"custom-libs2") 
    (baseDirectories ** "*.jar").classpath 
    } 

    object V { 
    val akka = "1.3" 
    val spray = "0.9.0-RC1" 
    val specs2 = "1.7.1" 
    val jetty = "8.1.0.v20120127" 
    val slf4j = "1.6.4" 
    val logback = "1.0.0" 
    } 

    object Compile { 
    val akkaActor = "se.scalablesolutions.akka" % "akka-actor"  % V.akka % "compile" 
    val sprayServer = "cc.spray"     % "spray-server" % V.spray % "compile" 
    } 

    object Test { 
    val specs2  = "org.specs2"    %% "specs2"   % V.specs2 % "test" 
    } 

    object Container { 
    val jettyWebApp = "org.eclipse.jetty"   % "jetty-webapp" % V.jetty % "container" 
    val akkaSlf4j = "se.scalablesolutions.akka" % "akka-slf4j"  % V.akka 
    val slf4j  = "org.slf4j"     % "slf4j-api"  % V.slf4j 
    val logback  = "ch.qos.logback"   % "logback-classic" % V.logback 
    } 
} 

答えて

2

Eugene Vigdorchikによって答えとして、それは次のコードとして働くものを作っ:完全な例available on Github

import sbt._ 
import com.github.siasia._ 
import PluginKeys._ 
import Keys._ 

object Build extends sbt.Build { 

    import Dependencies._ 

    var unmanagedListing = unmanagedJars in Compile := { 
    Dependencies.listUnmanaged(file(".").getAbsoluteFile) 
    } 

    lazy val myProject = Project("spray-template", file(".")) 
    .settings(WebPlugin.webSettings: _*) 
    .settings(port in config("container") := 8080) 
    .settings(
     organization := "com.example", 
     version  := "0.9.0-RC1", 
     scalaVersion := "2.9.1", 
     scalacOptions := Seq("-deprecation", "-encoding", "utf8"), 
     resolvers  ++= Dependencies.resolutionRepos, 
     libraryDependencies ++= Seq(
     C.akkaActor, 
     C.sprayServer, 
     Test.specs2, 
     Container.jettyWebApp, 
     Container.akkaSlf4j, 
     Container.slf4j, 
     Container.logback 
    ), 
     unmanagedListing 
    ) 

} 

object Dependencies { 
    val resolutionRepos = Seq(
    ScalaToolsSnapshots, 
    "Typesafe repo" at "http://repo.typesafe.com/typesafe/releases/", 
    "spray repo" at "http://repo.spray.cc/" 
) 

    def listUnmanaged(base : RichFile) : Keys.Classpath = { 
    val baseDirectories = (base/"custom-libs") +++ (base/"custom-libs2") 
    (baseDirectories ** "*.jar").classpath 
    } 

    object V { 
    val akka = "1.3" 
    val spray = "0.9.0-RC1" 
    val specs2 = "1.7.1" 
    val jetty = "8.1.0.v20120127" 
    val slf4j = "1.6.4" 
    val logback = "1.0.0" 
    } 

    object C { 
    val akkaActor = "se.scalablesolutions.akka" % "akka-actor"  % V.akka % "compile" 
    val sprayServer = "cc.spray"     % "spray-server" % V.spray % "compile" 
    } 

    object Test { 
    val specs2  = "org.specs2"    %% "specs2"   % V.specs2 % "test" 
    } 

    object Container { 
    val jettyWebApp = "org.eclipse.jetty"   % "jetty-webapp" % V.jetty % "container" 
    val akkaSlf4j = "se.scalablesolutions.akka" % "akka-slf4j"  % V.akka 
    val slf4j  = "org.slf4j"     % "slf4j-api"  % V.slf4j 
    val logback  = "ch.qos.logback"   % "logback-classic" % V.logback 
    } 
} 

ソースレポ。

7

私はちょうどSBT 0.11.xを使用して、私のbuild.sbtファイルからの断片を投稿してください。それはおそらく少しリファクタリングすることができます。

unmanagedJars in Compile <++= baseDirectory map { base => 
    val libs = base/"lib" 
    val dirs = (libs/"batik") +++ (libs/"libtw") +++ (libs/"kiama") 
    (dirs ** "*.jar").classpath 
} 
+0

私は私Build.scalaファイルでこれを置くかして、build.sbtファイルを持っていけませんか? –

+1

@MaurícioLinhares 'Build.scala'ファイルにこれらの行を追加してみましたか? – ziggystar

+0

Buildオブジェクト本体の内部に追加しましたが、動作しません。 –

3

フォルダーの一覧にパスを追加して、アンマネージの依存関係をスキャンすることができます。たとえば、runタスクの "lib"に加えて "config"というフォルダを見るには、以下を追加します。 compileタスク変更の場合RuntimeCompile

unmanagedClasspath in Runtime <+= (baseDirectory) map { 
    bd => Attributed.blank(bd/"config") 
} 
+0

動作しませんでした。問題を示すサンプルプロジェクトはここにあります - > https://github.com/mauricio/sbt-with-many-unmanaged-repos - どんな助けもありがとうございます。 –

関連する問題