2012-02-19 4 views
5

Sto cercando di ottenere SBT per creare un progetto che potrebbe avere più di una directory non gestita. Se avessi una singola directory, ho potuto facilmente fare in questo modo:Come aggiungere i jar da più di una directory non gestita in una configurazione di progetto SBT .scala

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

Ma dal momento che ho due directory con vasi non gestiti, ho bisogno di essere in grado di aggiungere tutti. Ho trovato alcune informazioni in here, ma ancora non mi sembra utile per il mio pieno file .scala.

Ho creato un progetto semplice che mostra il problema in here. E di seguito è il mio file Build.scala.

UPDATE

Ho qualche forma di aiuto alla sbt-users list e sono stati in grado di definire correttamente i non gestite-giare, ma il codice ancora non compila (ma SBT spettacolo non gestite-giare mostra correttamente i file).

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 
    } 
} 

risposta

2

Come risposto da Eugene Vigdorchik, ciò che ha reso il lavoro come il seguente codice:

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 
    } 
} 

repo Fonte con la piena esempio available on Github.

7

Ho appena inviare il frammento dal mio file build.sbt, utilizzando SBT 0.11.x. Potrebbe probabilmente essere refactored un po '.

+0

Non ho un file build.sbt, erano posso collocare questo sul mio Build.scala presentare? –

+1

@ MaurícioLinhares Hai provato semplicemente ad aggiungere quelle linee al tuo file 'Build.scala'? – ziggystar

+0

Aggiunto all'interno del corpo dell'oggetto Build, non funziona. –

3

È possibile aggiungere ulteriori percorsi all'elenco di cartelle per la ricerca di dipendenze non gestite. Ad esempio, per cercare in una cartella denominata "config" oltre a "lib" per l'attività run, è possibile aggiungere quanto segue. Per il cambio di attività compileRuntime a Compile.

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

Non ha funzionato.Un esempio di progetto che mostra il problema è qui -> https://github.com/mauricio/sbt-with-many-unmanaged-repos - qualsiasi aiuto è apprezzato. –

Problemi correlati