2013-05-14 72 views
2

我想在我的gradle自定義任務中使用Apache ant sshexec任務。問題是這個任務不起作用(輸出未在控制檯中顯示,並且sshexec操作未執行)。這是我如何使用它:Ant從gradle調用的sshexec任務不顯示輸出

configurations { 
    sshexecAntTask 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    sshexecAntTask 'org.apache.ant:ant-jsch:1.7.0' 
} 

// ---------------------------------------------------- 

import java.nio.file.FileAlreadyExistsException; 
import java.nio.file.Files 

class MyCustomTask extends DefaultTask { 

    @TaskAction 
    def build() { 
     String command = "" 
     command = 'cmd.exe /C mdir C:\\aadd' 
     runSshCommand(command) 
    } 

    private void runSshCommand(String command) { 
     String host = "host" 
     String username = "username" 
     String password = "password" 

     ant.taskdef(name: 'sshexec', classname: 'org.apache.tools.ant.taskdefs.optional.ssh.SSHExec', classpath: project.configurations.sshexecAntTask.asPath) 
     // this command is not executed; why? 
     ant.sshexec(host: host, username: username, password: password, command: command, trust: 'true', failonerror: 'true') 
    } 

} 

[編輯] 我測試過sshexec那些是我的結果:

  1. cmd.exe /C echo test > C:\testresult.txt從螞蟻工作正常啓動的命令和輸出返回文件。
  2. 從gradle開始的命令cmd.exe /C echo test > C:\testresult.txt正常工作,輸出返回到文件。大!
  3. 從ant開始的命令cmd.exe /C echo test正常工作,輸出返回到stdout。
  4. 從gradle開始的命令cmd.exe /C echo test正常工作,但輸出不會返回到stdout。
  5. cmd.exe /C mkdir C:\\\\Inetpub\\\\ftproot\\\\temp\\\\jakisnowykatalog從螞蟻工作正常啓動的命令,並創建目錄(我需要使用\\\\作爲路徑分隔符,因爲\\\/不工作)
  6. cmd.exe /C mkdir C:\\\\Inetpub\\\\ftproot\\\\temp\\\\jakisnowykatalog從開始的gradle的命令不工作,目錄沒有被創建。

我應該補充說我想用windows ssh服務器(而不是unix/mac)連接,但我也用mac shh測試過這些命令但沒有成功。請幫忙!

[另一編輯] 我創建了groovy測試代碼,它使用jsch庫執行命令,它的工作原理。我仍然不知道爲什麼螞蟻任務不工作。

import com.jcraft.jsch.* 
import java.util.Properties; 

private void jschTest() { 
    Session session = null 
    Channel channel = null 
    try { 
     JSch jsch = new JSch() 
     session = jsch.getSession("host", "login", 22) 
     session.setPassword("password") 
     Properties config = new Properties() 
     config.put("StrictHostKeyChecking", "no") 
     session.setConfig(config) 
     session.connect() 

     String command = "cmd.exe /C mkdir C:\\gradledir" 
     channel = session.openChannel("exec"); 
     ((ChannelExec)channel).setCommand(command); 
     channel.connect() 
    } 
    catch (Exception e) { 
     println e.getMessage() 
    } 
    finally { 
     if (session!=null) { 
      session.disconnect() 
     } 
     if (channel!=null) { 
      channel.disconnect() 
     } 
    } 
} 

回答

1

假設你聲明類型MyCustomTask的任務,並正確地執行它,我看不出有任何理由Ant任務將不會得到執行。問題在其他地方更可能發生(例如,Ant任務的配置錯誤)。

+0

謝謝,我會檢查它。我確信螞蟻能正常工作,因爲我每天都在使用它。 – pepuch 2013-05-15 05:10:10

相關問題