2013-12-16 67 views
5

我應該在Windows操作系統gradle產出:執行任務「類型:執行」如果我取消註釋行,之後它的任務與空間

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配置文件的gradle這個任務很多爭論出現失敗並對我說:「C:/ IBM」不是有效的批處理文件。如果我將profileTemplates不包含在包含空格的文件夾中,則一切正常。但模板應該位於int isHome(有時候是家有空間(

我有,現在的想法,爲什麼添加模板的關鍵值與空間的影響,這樣Gradle試圖啓動「C:/ IBM」,而不是指定'C:/IBM new/WebSphere/AppServer/bin/manageprofiles.bat'。似乎可能是java.lang.ProcessBuilder中的問題。

我試圖引用路徑,通過添加"/""但沒有任何作用(((並不意外,因爲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 
} 

的基本思想是將參數傳遞給搖籃不長字符串,但作爲一個列表。所以用這種方法如果一個參數包含一個空格就沒有任何問題。

+0

這個解決方案對我來說並不奏效,我有一個參數,比如'--autoprefix =」最後2個版本「',而雙引號之間的空格總是丟掉東西。 –

2

更改以下行

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

這樣,到批處理文件的完整路徑被引用。

編輯 - 正如dbenhan所述,有點模糊。這「應該」是這樣的

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 +'/斌/ manageprofiles.bat「')' – dbenham

+0

@dbenham:我知道。但是,這允許取消註釋以下兩行,並使用'str.add(wasHome +'/ profileTemplates/default'')'重新使用最初的引用(只是開玩笑,你是對的;-)) –

+0

嘗試兩個,仍然是相同的結果(((((還沒有工作,不知何故螞蟻做得很完美,用gradle我沒有辦法成功 – serg

0

嘗試這個

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

     println result1.toString() 
}