2011-12-22 127 views
7

我試圖用Ant通過FTP將zip文件上載到Windows Server 2008 R2 FTP服務器(如果有問題)。我有一個類似的任務來創建目錄/釋放,它工作,但不知何故通過FTP上傳給我的問題。Ant FTP任務失敗:java.net.SocketException

<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 

我在做什麼錯?

+0

我有同樣的問題,但不能關閉防火牆,因爲我不是管理員。其他解決方案? – clamp 2012-02-22 09:27:10

+0

注意:使用另一個ftp客戶端,如filezilla工作正常! – clamp 2012-02-22 09:46:50

回答

2

關閉Windows防火牆解決了問題。

2

值得嘗試的一件事是被動ftp。螞蟻ftp task有這個passive屬性:

選擇被動模式(「是」)轉移,更好地通過防火牆 連接,性能爲代價。默認爲「否」

有一個主動和被動模式之間的區別here。關鍵是,對於ftp命令(包括mkdir和OP問題中的chdir),使用單個開放端口(通常是端口21)。但是對於數據傳輸,可能會使用不同的,可能是防火牆阻塞的端口。有關ftp的防火牆相關問題有時會顯示上述症狀。

+0

謝謝!它雖然沒有幫助,仍然與被動=「是」相同的錯誤。但也許我們是在正確的軌道上,因爲像列表和mkdir命令工作正常。只發送失敗。 – clamp 2012-02-23 09:34:02