Я использую Gradle для копирования файлов с удаленных машин на локальный компьютер.Ниже приведен фрагмент.
ant.scp(file: "${userName}:${pwd}@${hostName}:${remoteFileAbsPath}", todir: localFileDirPath, trust: "true")
Приведенный выше фрагмент отлично работает в оболочке Windows, но завершается ошибкой в оболочке Ubuntu со следующей ошибкой.
Caused by: : Copying from a remote server to a remote server is not supported.
at org.apache.tools.ant.taskdefs.optional.ssh.Scp.execute(Scp.java:229)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:77)...
Обычный scp с терминала работает нормально, как и ожидалось.Только ant.scp
терпит неудачу только в среде Linux.Объявление taskdef: ant.taskdef(name: 'scp', classname: 'org.apache.tools.ant.taskdefs.optional.ssh.Scp', classpath:somepath)
.Любые указатели / ссылки на причину проблемы будут полезны.
Во время отладки я только что выяснил, что переменная localFileDirPath
имеет символ @.Например, имя localDir является «sample @ localDirectory».Теперь, я думаю, ant.scp предполагает, что «sample @ localDirectory» - это еще один удаленный сервер, благодаря которому сообщение об ошибке имеет смысл.Когда я тестирую с другим localFileDirPath без @, ant.scp работает просто отлично.Теперь, в моем случае, локальный каталог будет иметь @.Итак, я выясняю, как избежать этого персонажа.