sshexec
gradle カスタム タスクでApache ant タスクを使用したいと考えています。問題は、このタスクが機能しないことです (コンソールに出力が表示されず、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 をテストしましたが、それらは私の結果です:
- ant から開始されたコマンド
cmd.exe /C echo test > C:\testresult.txt
は正しく機能し、出力はファイルに返されます。 cmd.exe /C echo test > C:\testresult.txt
gradle から開始されたコマンドは正しく機能し、出力はファイルに返されます。すごい!- ant から開始されたコマンド
cmd.exe /C echo test
は正しく機能し、出力は stdout に返されます。! cmd.exe /C echo test
gradle から開始されたコマンドは正しく機能しますが、出力は stdout に返されません。!- ant から開始されたコマンド
cmd.exe /C mkdir C:\\\\Inetpub\\\\ftproot\\\\temp\\\\jakisnowykatalog
は正しく機能し、ディレクトリが作成されます ( , , が機能しないため、パス区切りとして使用する必要があります\\\\
)\\
\
/
- gradle から開始したコマンド
cmd.exe /C mkdir C:\\\\Inetpub\\\\ftproot\\\\temp\\\\jakisnowykatalog
が機能せず、ディレクトリが作成されません。
Windows sshサーバー(unix / macではなく)に接続したいことを追加する必要がありますが、これらのコマンドをmac shhでテストしても成功しませんでした。助けてください!
[別の編集] jschライブラリを使用してコマンドを実行するグルーヴィーなテストコードを作成しましたが、動作します。ant タスクが機能しない理由はまだわかりません。
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()
}
}
}