2012-02-19 20 views
5

मैं एक ऐसी परियोजना बनाने के लिए एसबीटी प्राप्त करने की कोशिश कर रहा हूं जिसमें एक से अधिक अप्रबंधित निर्देशिका हो सकती है। अगर मैं एक ही निर्देशिका था, मैं आसानी से यह इस तरह कर सकता है:मैं एसबीटी में एक से अधिक अप्रबंधित निर्देशिका से जार कैसे जोड़ सकता हूं। स्केल प्रोजेक्ट कॉन्फ़िगरेशन

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

लेकिन चूंकि मैं अप्रबंधित जार के साथ दो निर्देशिका है, मैं उन सब को जोड़ने के लिए सक्षम होना चाहिए। मुझे कुछ जानकारी in here मिली है, लेकिन अभी भी मेरे पूर्ण .scala फ़ाइल निर्माण के लिए उपयोगी प्रतीत नहीं होता है।

मैंने एक साधारण परियोजना बनाई है जो समस्या in here दिखाती है। और नीचे मेरा Build.scala फ़ाइल है।

अद्यतन

मैं कुछ मदद प्रपत्र sbt-users list मिल गया है और सही ढंग से अप्रबंधित-जार परिभाषित करने के लिए सक्षम किया गया है, लेकिन अभी भी कोड संकलन नहीं करता है (लेकिन एसबीटी शो अप्रबंधित-जार फ़ाइलों को सही तरीके से दिखाता है)।

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

मैं बस अपना build.sbt फ़ाइल से टुकड़ा पोस्ट, एसबीटी 0.11.x का उपयोग कर। यह शायद थोड़ा सा refactored किया जा सकता है।

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

मैं न एक build.sbt फ़ाइल है, मैं अपने Build.scala पर इस रखूँ गया फाइल? –

+1

@ MaurícioLinhares क्या आपने बस उन पंक्तियों को अपनी 'Build.scala' फ़ाइल में जोड़ने का प्रयास किया है? – ziggystar

+0

इसे बिल्ड ऑब्जेक्ट बॉडी के अंदर जोड़ा गया, काम नहीं करता है। –

3

आप अप्रबंधित निर्भरताओं के लिए स्कैन करने के लिए फ़ोल्डर की सूची में अतिरिक्त पथ जोड़ सकते हैं। उदाहरण के लिए, run कार्य के लिए "lib" के अलावा "config" नामक फ़ोल्डर में देखने के लिए, आप निम्न जोड़ सकते हैं। compile कार्य परिवर्तन Runtime से Compile के लिए।

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

काम नहीं किया।इस मुद्दे को दिखाते हुए एक नमूना प्रोजेक्ट यहां है -> https://github.com/mauricio/sbt-with-many-unmanaged-repos - किसी भी मदद की सराहना की जाती है। –