2013-12-16 14 views
5

मैं Gradle कार्य है कि Windows OSGradle: कार्य निष्पादित "के प्रकार: Exec" रिक्त स्थान

task createProfile(type:Exec) { 

    def commandToExecute = new StringBuffer() 
    def profile = 'AppSrv02' 
    def wasHome = 'C:/IBM new/WebSphere/AppServer' 

    def str = new LinkedList <String>(); 
    str.add('cmd') 
    str.add('/c') 
    str.add(wasHome + '/bin/manageprofiles.bat') 
    str.add('-create') 
    str.add('-profileName') 
    str.add(profile) 
    //str.add('-templatePath') 
    //str.add(wasHome + '/profileTemplates/default') 

    println (str) 
    commandLine str.toArray() 

} 

और समस्या पर Websphere प्रोफ़ाइल बनाने चाहिए के साथ कई तर्क के साथ प्रकट होता है अगर मैं टिप्पणी की लाइनों uncomment यह काम करने के बाद विफल रहता है और मुझे कहता है: "सी:/आईबीएम" मान्य बैच फ़ाइल नहीं है। यदि मैं प्रोफ़ाइल टेम्पलेट्स को उस फ़ोल्डर में नहीं डालता जिसमें रिक्त स्थान हैं, तो सब कुछ ठीक काम करता है। लेकिन टेम्पलेट्स को int होना चाहिए थाम (और कभी-कभी थाम में रिक्त स्थान होते हैं (

मेरे पास अब विचार है कि स्पेस प्रभाव के साथ टेम्पलेट कुंजी को मूल्य के साथ क्यों जोड़ना है, जैसे कि ग्राडल "सी:/आईबीएम" को निर्दिष्ट करने की कोशिश करता है 'सी:/आईबीएम नए/WebSphere/AppServer/bin/manageprofiles.bat '। ऐसा लगता है कि, संभवतः, java.lang.ProcessBuilder अंदर समस्या।

मैं, रास्तों उद्धृत करने के लिए कोशिश करता है "/"" जोड़कर लेकिन कुछ भी काम करता है ((((क्या आश्चर्य की बात नहीं है, क्योंकि प्रोसेसबिल्डर का मतलब है कि इसकी आवश्यकता होने पर खुद को उद्धृत करना है।

तो, मैं पूछ रहा हूं कि किसी को भी ऐसी ही समस्या है और इस मुद्दे के आसपास काम करने की सलाह दे सकती है? अग्रिम धन्यवाद।

उत्तर

7

पर बदलने की आवश्यकता होगी यदि किसी को इसकी आवश्यकता है, तो हमें इस समस्या के लिए एक समाधान मिला। कार्य अंत में लगता है कि: मूल विचार

task createProfile(type: Exec) { 
    executable = new File(wsadminLocation, manageProfilesFileName) 
    def templatePath = wasHome + File.separator + "profileTemplates" + File.separator + "default" 
    def argsList = ["-create", "-profileName", profile, "-templatePath", templatePath, "-nodeName", nodeName, "-cellName", wasCellName, "-enableAdminSecurity", isProfileSecured, "-adminUserName", rootProject.wasLogin, "-adminPassword", rootProject.wasPassword] 
    args = argsList 
} 

तक नहीं स्ट्रिंग Gradle तर्क पारित करने के लिए है, लेकिन एक सूची के रूप में। इसलिए यदि किसी तर्क में कोई स्थान होता है तो इस तरह कोई समस्या नहीं होती है।

+0

यह समाधान मेरे लिए काम नहीं करता है। मेरे पास तर्क था- 'autautrefix =" पिछले 2 संस्करण "', और डबलक्वॉट्स के बीच की जगहें हमेशा चीजों को फेंक रही थीं। –

2

बदलें निम्नलिखित लाइनों

def wasHome = '"C:/IBM new/WebSphere/AppServer' 
... 
str.add(wasHome + '/bin/manageprofiles.bat"') 

इस तरह, बैच फ़ाइल का पूर्ण पथ उद्धृत किया गया है।

संपादित - जैसा कि डबेंहान ने बताया, थोड़ा अपमानित।

task createProfile(type:Exec) { 

    def commandToExecute = new StringBuffer() 
    def profile = 'AppSrv02' 
    def wasHome = 'C:/IBM new/WebSphere/AppServer' 

    def str = new LinkedList <String>(); 
    str.add('cmd') 
    str.add('/c') 
    str.add('"' + wasHome + '/bin/manageprofiles.bat"') 
    str.add('-create') 
    str.add('-profileName') 
    str.add(profile) 
    str.add('-templatePath') 
    str.add('"' + wasHome + '/profileTemplates/default"') 

    println (str) 
    commandLine str.toArray() 

} 

की तरह यह कुछ हो "चाहिए" लेकिन, जबकि विशेष और सामान्य रूप में खिड़कियों में Gradle स्लेश विभाजक साथ रास्ते संभाल कर सकते हैं, मुझे नहीं पता है, तो manageprofiles.bat कर सकते है, और आप उस में एक पथ के साथ एक पैरामीटर गुजर रहे हैं । शायद, आपको अपने पथ 'c:\\IBM new\\....'

+0

+1 का प्रयास करें, या शायद थोड़ा कम समझ से परे: 'str.add ('' '+ wasHome +'/bin/manageprofiles.bat" ') ' – dbenham

+0

@dbenham: मुझे पता है। लेकिन यह निम्नलिखित दो पंक्तियों को कम करने की अनुमति देता है और 'str.add (wasHome +'/profileTemplates/default "'का उपयोग करता है) प्रारंभिक उद्धरण का उपयोग कर रहा है (बस मजाक कर रहा है, आप सही हैं ;-)) –

+0

दोनों ने कोशिश की, फिर भी वही परिणाम (((अभी भी काम नहीं कर रहा है, किसी भी तरह से चींटी पूरी तरह से करता है, धीरे-धीरे मैं सफल होने में कामयाब नहीं हूं। – serg

0

यह

task xyz { 
def result1 = exec { 
      workingDir "D:/abc/efg" 
      commandLine 'cmd', '/c', 'CDUTIL.bat', "qwe", "rty" 
     } 

     println result1.toString() 
} 
संबंधित मुद्दे