Groovy AntBuilder scp捕获异常
我需要使用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
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让它很痛苦:-(我问你这个问题是因为我没有找到我可以放的东西:)。