2012-11-29 11 views
9

में कामकाजी निर्देशिका मैं एक विशिष्ट निर्देशिका में जावा प्रोग्राम चलाने में सक्षम होना चाहता हूं। मुझे लगता है कि यह काम करने वाली निर्देशिका को parametrize करने के लिए काफी सुविधाजनक है, क्योंकि यह आसानी से विन्यास प्रबंधन का प्रबंधन करने की अनुमति देता है।एसबीटी

उदाहरण के लिए एक फ़ोल्डर में आप परीक्षण के लिए कॉन्फ़िगरेशन कर सकते हैं, अन्य में आपके पास उत्पादन के लिए आवश्यक संसाधन हो सकते हैं। आप शायद सोचते हैं कि संसाधनों को शामिल/निकालने के लिए क्लासपाथ में हेरफेर करने का विकल्प है, लेकिन ऐसा समाधान केवल तभी काम करता है जब आप क्लासपाथ में संग्रहीत संसाधनों में रूचि रखते हैं और Classloader.getResource(r) का उपयोग करके उनका संदर्भ देते हैं। लेकिन क्या होगा यदि आपके पास कुछ बाहरी कॉन्फ़िगरेशन है और आप File file = new File("app.properties"); जैसे सरल निर्देशों का उपयोग करके इसे एक्सेस करना चाहते हैं?

चलिए सामान्य उदाहरण देखते हैं।

आपका एप्लिकेशन app.properties फ़ाइल का उपयोग करता है, जहां आप बाहरी सेवा के लिए प्रमाण-पत्र संग्रहीत करते हैं। एप्लिकेशन इस फ़ाइल को कार्यशील निर्देशिका में देखता है, क्योंकि आप इसका उपयोग करने के लिए File file = new File("app.properties"); निर्देश का उपयोग करते हैं। अपने परीक्षणों में आप अपने परीक्षणों के लिए app.properties का उपयोग करना चाहते हैं। आप एकीकरण परीक्षण में आप app.properties किसी अन्य वातावरण के लिए विशिष्ट उपयोग करना चाहते हैं। और अंत में जब आप एप्लिकेशन बनाते हैं और रिलीज करते हैं तो आप अन्य app.properties फ़ाइल प्रदान करना चाहते हैं।

this.getClass.getClassLoader.getResource("app.properties"); 
बेशक

आप चतुर प्रोग्रामर हैं

if(configTest) 
    file = File("testWorkDir/app.properties"); 
else if(config2) 
    file = File("config2WorkDir/app.properties"); 
else 
    file = File("app.properties"); 

या बजाय classpath में संसाधनों का उपयोग कर: इन सभी संसाधनों तुम सिर्फ बजाय File file = new File("app.properties"); टाइपिंग (छद्म कोड) द्वारा एक ही तरह से हमेशा उपयोग करना चाहते और आप निर्माण उपकरण जैसे मैवेन, ग्रेडल या एसबीटी :)

शुरुआत में खरीदा गया है। कम से कम प्रश्न:

क्या जावा में कार्यशील निर्देशिका सेट करने का कोई तरीका है और यदि हाँ इसे बिल्ड टूल्स (विशेष रूप से एसबीटी) में कॉन्फ़िगर कैसे करें?

अतिरिक्त जानकारी:

  • बदलते 'user.dir' प्रणाली संपत्ति (मैं इसे programaticly बदलने की कोशिश की है) काम नहीं कर रहा।
  • एसबीटी बदलते 'working directory' via baseDirectory setting for test में बदलता है आधार डायरेक्टरी जो मेरी समझ में आधार डीआईआर नहीं है और यह new java.io.File(".").getAbsolutePath के बराबर नहीं है।
  • पर्यावरण परिवर्तनीय प्रदान करना जैसे YOUR_APP_HOME और इस पथ से संसाधनों का संदर्भ करना व्यवहार्य है लेकिन इसके बारे में आपके कोड में याद रखना आवश्यक है।

उत्तर

2

यदि आप कांटा, तो आप कामकाजी निर्देशिका सहित सबकुछ नियंत्रित कर सकते हैं।

http://www.scala-sbt.org/0.13.5/docs/Detailed-Topics/Forking.html

उदाहरण कोड:

fork in run := true 
baseDirectory in run := file("/path/to/working/directory/") 
4

एसबीटी में बदल रहा है baseDirectory के माध्यम से 'कार्यशील निर्देशिका' परीक्षण के लिए सेटिंग बदलता है baseDirectory जो मेरे understangind में आधार निर्देशिका नहीं है और यह बराबर new java.io.File(".").getAbsolutePath नहीं है।

मुझे यकीन है कि क्या उपरोक्त कथन का मतलब है नहीं कर रहा हूँ, लेकिन एसबीटी के साथ run या test के दौरान अपने कार्यशील निर्देशिका को बदलने के लिए कांटा करने के लिए की जरूरत है। यह Enable forking और Change working directory में प्रलेखित है।