Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy AntBuilder scp捕获异常_Ant_Groovy_Scp_Antbuilder - Fatal编程技术网

Groovy AntBuilder scp捕获异常

Groovy AntBuilder scp捕获异常,ant,groovy,scp,antbuilder,Ant,Groovy,Scp,Antbuilder,我需要使用scp从远程主机复制一些文件 如果文件不在那里,我需要显示一条消息 我遇到的问题是,我无法捕获FileNotFound异常。我所拥有的只是一个BuildException,但即使连接无法完成,也会引发这个异常 这是我的密码 def ant = new AntBuilder() ant.scp( trust:true, file:"theFileToLook", todir:"destinationFolder", keyfile: "myrivateKe

我需要使用scp从远程主机复制一些文件

如果文件不在那里,我需要显示一条消息

我遇到的问题是,我无法捕获
FileNotFound
异常。我所拥有的只是一个BuildException,但即使连接无法完成,也会引发这个异常

这是我的密码

def ant = new AntBuilder()
ant.scp(
    trust:true,
    file:"theFileToLook",
    todir:"destinationFolder",
    keyfile: "myrivateKeyFile",
    verbose:true
)
当我把

catch(Exception e){
    log.error("error", e)
}
我有以下资料:

java.io.IOException: scp: theFileToLook: No such file or directory
    at org.apache.tools.ant.taskdefs.optional.ssh.ScpFromMessage.startRemoteCpProtocol(ScpFromMessage.java:189)
    at org.apache.tools.ant.taskdefs.optional.ssh.ScpFromMessage.execute(ScpFromMessage.java:143)
    at org.apache.tools.ant.taskdefs.optional.ssh.Scp.download(Scp.java:276)
    at org.apache.tools.ant.taskdefs.optional.ssh.Scp.execute(Scp.java:221)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at MyService$$EODjgsH6.executeScp(MyService.groovy:98)
    at MyService$$EODjgsH6.getFileFromRemoteHost(MyService.groovy:63)
    at MyController.get(RetrieveController.groovy:36)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
当我放置
println e.class
时,它显示
BuildException
。 问题是,如果我试图捕获IOException,它不会在捕获内部传递


有什么想法吗?

所以看起来Ant使用
BuildException
来包装抛出的任何异常

要显示消息,您需要实现以下功能:

def ant = new AntBuilder()
try {
    ant.scp(
        trust:true,
        file:"theFileToLook",
        todir:"destinationFolder",
        keyfile: "myrivateKeyFile",
        verbose:true
    )
}
catch( BuildException ex ) {
    if( ex.exception instanceof IOException ) {
        println "Whoops!  $ex.exception.message"
    }
    else {
        throw ex
    }
}

log.error('error',e.cause)
显示了什么?您可以编辑问题并粘贴完整的异常吗?我刚刚做了更改,这是一个
IOException
,不是吗?
println e.exception.class
显示什么?它显示java.io.IOException。但是如果我把catch(java.io.IOException)放进去,它就不会捕获它,它会工作。我没有想到这一点,因为错误信息并不明显。谢谢。@CC。是的,看起来BuildException(毫无帮助)将委托给底层异常的堆栈。很高兴我能帮上忙:-)我只有一个问题:为什么我必须用“e.exception instanceof”而不是“e instanceof”?(因为e.exception已被弃用)是吗?六羟甲基三聚氰胺六甲醚。。。当我有机会的时候,我会看一看,Apache没有公共javadoc让它很痛苦:-(我问你这个问题是因为我没有找到我可以放的东西:)。