首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy AntBuilder scp捕获异常

Groovy AntBuilder scp捕获异常
EN

Stack Overflow用户
提问于 2013-08-06 11:48:34
回答 1查看 1.1K关注 0票数 1

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

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

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

这是我的密码

代码语言:javascript
复制
def ant = new AntBuilder()
ant.scp(
    trust:true,
    file:"theFileToLook",
    todir:"destinationFolder",
    keyfile: "myrivateKeyFile",
    verbose:true
)

当我把

代码语言:javascript
复制
catch(Exception e){
    log.error("error", e)
}

我有以下几点:

代码语言:javascript
复制
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,它不会传递到捕获的内部。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-06 12:11:55

因此,看起来Ant使用BuildException来包装任何抛出的异常。

要显示消息,您需要实现如下内容:

代码语言:javascript
复制
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
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18079344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档