gpt4 book ai didi

java - 从 gradle 调用的 Ant sshexec 任务不显示输出

转载 作者:行者123 更新时间:2023-11-30 11:32:40 24 4
gpt4 key购买 nike

我想在我的 gradle 自定义任务中使用 Apache ant sshexec 任务。问题是此任务不起作用(输出未显示在控制台中,并且未执行 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. 从 ant 启动的命令 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 工作正常,输出返回到标准输出。 !
  4. 从 gradle 启动的命令 cmd.exe/C echo test 工作正常,但输出未返回到 stdout。 !
  5. 从 ant 启动的命令 cmd.exe/C mkdir C:\\\\Inetpub\\\\ftproot\\\\temp\\\\jakisnowykatalog 正常工作并创建目录 (我需要使用 \\\\ 作为路径分隔符,因为 \\\/ 不起作用)
  6. 从 gradle 启动的命令 cmd.exe/C mkdir C:\\\\Inetpub\\\\ftproot\\\\temp\\\\jakisnowykatalog 不起作用,目录是未创建。

我应该补充一点,我想连接 windows ssh 服务器(不是 unix/mac),但我也用 mac shh 测试了这些命令但没有成功。请帮忙!

[另一个编辑]我创建了 groovy 测试代码,它使用 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()
}
}
}

最佳答案

假设您声明了一个类型为 MyCustomTask 的任务并正确执行了它,我看不出 Ant 任务无法执行的原因。问题更有可能出现在其他地方(例如 Ant 任务配置错误)。

关于java - 从 gradle 调用的 Ant sshexec 任务不显示输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16540937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com