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那些是我的結果:
cmd.exe /C echo test > C:\testresult.txt
從螞蟻工作正常啓動的命令和輸出返回文件。- 從gradle開始的命令
cmd.exe /C echo test > C:\testresult.txt
正常工作,輸出返回到文件。大! - 從ant開始的命令
cmd.exe /C echo test
正常工作,輸出返回到stdout。 ! - 從gradle開始的命令
cmd.exe /C echo test
正常工作,但輸出不會返回到stdout。 ! cmd.exe /C mkdir C:\\\\Inetpub\\\\ftproot\\\\temp\\\\jakisnowykatalog
從螞蟻工作正常啓動的命令,並創建目錄(我需要使用\\\\
作爲路徑分隔符,因爲\\
,\
,/
不工作)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()
}
}
}
謝謝,我會檢查它。我確信螞蟻能正常工作,因爲我每天都在使用它。 – pepuch 2013-05-15 05:10:10