Ant FTP任务失败:java.net.SocketException

时间:2011-12-22 16:41:06

标签: ant ftp

我正在尝试使用Ant,通过FTP将zip文件上传到Windows Server 2008 R2 FTP服务器(如果重要的话)。我有一个类似的任务来创建目录/发布,它可以工作,但不知何故通过FTP上传给我带来了问题。

    <ftp    action="put"
            userid="${adapter.ftp.username}" 
            password="${adapter.ftp.password}"
            server="${ftp.hostname}"
            retriesAllowed="5"
            verbose="true"
            systemTypeKey="WINDOWS"
            remotedir="/Release" >

        <fileset dir=".">
            <include name="Adapter.zip"/>
        </fileset>
    </ftp>

Ant调试日志:

  [ftp] Opening FTP connection to 192.168.2.120
  [ftp] custom configuration
  [ftp] custom config: system key = WINDOWS
  [ftp] custom config: server language code = 
  [ftp] connected
  [ftp] logging in to FTP server
  [ftp] login succeeded
  [ftp] changing the remote directory to /Release
  [ftp] sending files
  fileset: Setup scanner in dir C:\dir with patternSet{ includes: [adapter.zip] excludes: [] }
  [ftp] transferring C:\dir\adapter.zip
  [ftp] try #1: IO error (adapter.zip), retrying
  /.../
  [ftp] try #6: IO error (adapter.zip), number of maximum retries reached (5), giving up
  [ftp] disconnecting
  build.xml:165: error during FTP transfer: java.net.SocketException: Software caused connection abort: socket write error
at org.apache.tools.ant.taskdefs.optional.net.FTP.execute(FTP.java:2538)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
   Caused by: java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlush(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at java.io.BufferedWriter.flush(Unknown Source)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:472)
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:534)
at org.apache.commons.net.ftp.FTP.port(FTP.java:862)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:463)
at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:374)
at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1379)
at org.apache.tools.ant.taskdefs.optional.net.FTP.sendFile(FTP.java:2149)
at org.apache.tools.ant.taskdefs.optional.net.FTP$2.execute(FTP.java:1792)
at org.apache.tools.ant.util.RetryHandler.execute(RetryHandler.java:57)
at org.apache.tools.ant.taskdefs.optional.net.FTP.executeRetryable(FTP.java:1709)
at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java:1788)
at org.apache.tools.ant.taskdefs.optional.net.FTP.transferFiles(FTP.java:1845)
at org.apache.tools.ant.taskdefs.optional.net.FTP.execute(FTP.java:2534)
... 15 more

我做错了什么?

2 个答案:

答案 0 :(得分:2)

关闭Windows防火墙解决了这个问题。

答案 1 :(得分:2)

值得一试的是被动ftp。 Ant ftp task具有passive属性:

  

选择被动模式(“是”)传输,以获得更好的防火墙   连接,以性能为代价。默认为“否”

有关主动模式和被动模式here之间的区别。关键点在于,对于ftp命令(包括mkdir和在OP问题中工作的chdir),使用单个开放端口 - 通常是端口21。但是对于数据传输,使用了一个不同的,可能是防火墙阻塞的端口。 ftp与防火墙相关的问题有时会显示出上述症状。