2009-07-22 7 views
57

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

मैं स्क्रिप्ट के भीतर से स्क्रिप्ट फ़ाइल के पथ तक कैसे पहुंच सकता हूं?

उत्तर

68

आप सही हैं कि new File(".").getCanonicalPath() काम नहीं करता है। यह कार्य निर्देशिका देता है।

स्क्रिप्ट निर्देशिका

scriptDir = new File(getClass().protectionDomain.codeSource.location.path).parent 

प्राप्त करने के लिए स्क्रिप्ट फ़ाइल पथ

scriptFile = getClass().protectionDomain.codeSource.location.path 
+0

दिलचस्प:

नीचे कैसे मैं अपने समस्या हल हो जाती है। यह जिस तरह से मैंने उम्मीद की वह काम नहीं करता है। लेकिन यह इस तथ्य के कारण है कि मैं गैंट से एक गैंट स्क्रिप्ट चला रहा हूं। तो कोडसोर्स वास्तव में जहां गैंट है, जहां मेरी स्क्रिप्ट नहीं है। –

+0

मेरे लिए काम नहीं करता है। 'getClass()। securityDomain.codeSource' शून्य लौटाता है। मैं ग्रोवी 2.0.1 का उपयोग कर रहा हूँ। – quux00

+0

ग्रोवी 1.8.5 या तो (विंडोज़ पर) – Fels

11

यह समझ में आता है आप एक स्क्रिप्ट रूप ग्रूवी कोड चला रहे हैं पाने के लिए, अन्यथा पूरे विचार हो जाता है थोड़ा उलझन में, आईएमओ। वर्कअराउंड यहां है: https://issues.apache.org/jira/browse/GROOVY-1642

असल में इसमें ग्रोवी स्क्रिप्ट के स्थान को पर्यावरण चर के रूप में पास करने के लिए startGroovy.sh को बदलना शामिल है।

0

Gradle उपयोगकर्ता

के लिए मैं जब मैं Gradle के साथ काम करने शुरू कर एक ही मुद्दा है। मैं रिमोट थ्रिफ्ट कंपाइलर (मेरी कंपनी द्वारा कस्टम) द्वारा अपने बहाव को संकलित करना चाहता हूं।

task compileThrift { 
doLast { 
     def projectLocation = projectDir.getAbsolutePath(); // HERE is what you've been looking for. 
     ssh.run { 
      session(remotes.compilerServer) { 
       // Delete existing thrift file. 
       cleanGeneratedFiles() 
       new File("$projectLocation/thrift/").eachFile() { f -> 
        def fileName=f.getName() 
        if(f.absolutePath.endsWith(".thrift")){ 
         put from: f, into: "$compilerLocation/$fileName" 
        } 
       } 
       execute "mkdir -p $compilerLocation/gen-java" 
       def compileResult = execute "bash $compilerLocation/genjar $serviceName", logging: 'stdout', pty: true 
       assert compileResult.contains('SUCCESSFUL') 
       get from: "$compilerLocation/$serviceName" + '.jar', into: "$projectLocation/libs/" 
      } 
     } 
    } 
} 
संबंधित मुद्दे

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