2012-01-01 8 views
5

मेरे पास एक एसबीटी (0.11.2) प्लगइन है जिसे प्लगइन के अंदर टेक्स्ट फ़ाइलों के लिए पथ प्राप्त करने की आवश्यकता है। मैं उसको कैसे करू? बेस डायरेक्टरी, स्रोत डायरेक्टरीज इत्यादि परियोजना के आधार पर सेट की गई हैं जिसमें प्लगइन शामिल है, प्लगइन का आधार नहीं।एसबीटी प्लगइन प्लगइन में फ़ाइल के लिए पथ कैसे प्राप्त करता है?

मैं प्लगइन उपयोगकर्ता को एक आदेश प्रदान करना चाहता हूं जो प्लगइन के अंदर रूबी फ़ाइल से डिफ़ॉल्ट खींचता है, और फिर प्लगइन उपयोगकर्ता को उन डिफ़ॉल्ट को ओवरराइड करने की अनुमति देता है।

उत्तर

1

आप पुराने पुराने जावा क्लास.getResource या Class.getResourceAsStream विधि का उपयोग क्यों नहीं करते? जैसे इस तरह:

object TestPlugin extends Plugin { 

    override def settings = super.settings ++ Seq(
    commands += testCommand 
) 

    def testCommand = Command.command("test")(action) 

    def action(state: State) = { 
    try { 
     val in = getClass.getResourceAsStream("/test.txt") 
     val text = Source.fromInputStream(in).getLines mkString System.getProperty("line.separator") 
     logger(state).info(text) 
     in.close() 
     state 
    } catch { 
     case e: Exception => 
     logger(state).error(e.getMessage) 
     state.fail 
    } 
    } 
} 
+0

मुझे नहीं लगता कि इससे मदद मिलती है। मुझे वास्तव में प्लगइन की जड़ के लिए पथ की आवश्यकता है, चाहे वह एक जार या निर्देशिका हो। पहली फ़ाइल के अंदर बहुत सी चीजें अन्य रिश्तेदार पथों (यह रूबी) के कई संदर्भ शामिल करने जा रही हैं, इसलिए स्ट्रीम होने के लिए उपयोगी नहीं है, और स्ट्रीम को कॉपी करना भी उपयोगी नहीं है। –

+1

एक रास्ता क्या है? GetClass.getResource मदद नहीं मिलेगी? यह एक यूआरएल देता है, उदा। फ़ाइल:/foo/बार। –

+0

हाँ, आप सही हैं। मैंने डॉक्टर को गलत तरीके से पढ़ा और सोचा कि एकमात्र चीज जो मैं कर सकता था वह स्ट्रीम प्राप्त करना था। मैं c.getProtectionDomain.getCodeSource.getLocation.getPath का उपयोग कर समाप्त हुआ। –

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