2011-12-22 39 views
7

Estoy intentando, con Ant, cargar un archivo zip a través de FTP a un servidor FTP de Windows Server 2008 R2 (si es que importa). Tengo una tarea similar para crear el directorio/Release, que funciona, pero de alguna manera la carga a través de FTP me da problemas.Error en la tarea 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> 

El registro de depuración 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 

¿Qué estoy haciendo mal?

+0

tengo el mismo problema, pero no puedo apagar el firewall ya que no soy el administrador. otras soluciones? – clamp

+0

nota: usar otro cliente ftp como filezilla funciona bien! – clamp

Respuesta

2

Apagar el cortafuegos de Windows resolvió el problema.

2

Una cosa que vale la pena intentar es el ftp pasivo. La hormiga ftp task tiene un atributo para este passive:

selecciona el modo pasivo ("sí") las transferencias, para una mejor conectividad a través de cortafuegos , al precio de rendimiento. El valor predeterminado es "no"

Existe una descripción de la diferencia entre el modo activo y el modo pasivo here. El punto clave es que para los comandos ftp (incluyendo mkdir y el chdir que funciona en la pregunta OP) se usa un solo puerto abierto, generalmente el puerto 21. Pero para las transferencias de datos se usa un puerto diferente, posiblemente bloqueado por el firewall. Los problemas relacionados con Firewall con ftp a veces pueden mostrar los síntomas mencionados anteriormente.

+0

gracias! no ayudó, sigue siendo el mismo error con pasivo = "sí". pero tal vez estamos en el camino correcto, ya que comandos como list y mkdir funcionan bien. solo envía y pone falla. – clamp

Cuestiones relacionadas