2011-09-08 16 views
8

पर स्केल 2.9.1 के साथ मैं एसबीटी 0.10 का उपयोग कर रहा हूं।एसबीटी 0.10 के तहत निर्भरता एकत्रित करना (सभी निर्भरता जार को लक्ष्य/स्कैला-संस्करण/lib /)

मैं http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars#987b6af687b8e33b

हालांकि मैं एक बहुत बड़ा जार नहीं करना चाहती पढ़ा है। मैं बस निर्भरता जार लक्ष्य/scala-2.9.1.final/lib निर्देशिका में समाप्त होना चाहता हूं।

कारण मैं एक बड़ा जार नहीं चाहता, यह परियोजना libs का उपयोग करती है, और आमतौर पर केवल एप्लिकेशन .jar परिवर्तन। हालांकि इस बहु-भाषा प्रोजेक्ट है और सभी टीम के सदस्यों के पास स्कैला या एसबीटी नहीं है, जार बस गिट करने के लिए प्रतिबद्ध हैं। एक विशाल डायर अद्यतन regullary रिपो आकार को फुलाएगा।

मैं उन निर्भरताओं की प्रतिलिपि कैसे बना सकता हूं? ;)

उत्तर

14

आप से विन्यास कॉपी करने के लिए आइवी लता विन्यास निर्दिष्ट नहीं किया है, लेकिन यहाँ एक पूरी तरह से काम कर रहे उदाहरण है कि सभी अपने target/<scala version>/lib फ़ोल्डर में कामयाब रहे निर्भरता (स्केला संस्करण crossTarget कार्य द्वारा दिया जाता है) की प्रतिलिपि जाएगा। बस इस कॉपी और फ़ाइल project/Build.scala (या जो भी आप चाहते हैं फ़ाइल नाम) में रख:

import sbt._ 
import Keys._ 

object MyBuild extends Build { 

    lazy val copyDependencies = TaskKey[Unit]("copy-dependencies") 

    def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map { 
    (updateReport, out, scalaVer) => 
    updateReport.allFiles foreach { srcPath => 
     val destPath = out/"lib"/srcPath.getName 
     IO.copyFile(srcPath, destPath, preserveLastModified=true) 
    } 
    } 

    lazy val root = Project(
    "root", 
    file("."), 
    settings = Defaults.defaultSettings ++ Seq(
     copyDepTask 
    ) 
) 
} 

आप एक विशिष्ट विन्यास चाहते हैं, द्वारा updateReport.select(configuration = Set("compile")) या जो कुछ भी आइवी लता विन्यास आप चाहते हैं

updateReport.allFiles बदलें।

1

विभिन्न "क्लासपाथ" कुंजियों में कक्षापंथी पर अलग-अलग विचार होते हैं, लेकिन शायद सबसे आसान बात एसबीटी-असेंबली प्लगइन को संशोधित करना है ताकि जार को अनजिप/रीज़िप चक्र करने की बजाय निर्देशिका में छोड़ दें। प्लगइन बहुत छोटा है (केवल 150 लाइनें) और यह एक सरसरी नज़र से बहुत स्पष्ट है कि बदलने के लिए सही जगह क्या है।

संबंधित मुद्दे