Не удается выполнить задачу Ant FTP: java.net.SocketException - PullRequest
7 голосов
/ 22 декабря 2011

Я пытаюсь с помощью Ant загрузить zip-файл через FTP на FTP-сервер Windows Server 2008 R2 (если это имеет значение). У меня есть аналогичная задача по созданию каталога / Release, который работает, но каким-то образом загрузка через 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 ]

2 голосов
/ 23 февраля 2012

Одна вещь, которую стоит попробовать - это пассивный ftp. Задача Ant ftp имеет атрибут passive для этого:

выбирает передачи в пассивном режиме («да») для лучшего сквозного межсетевого экрана подключение по цене производительности. По умолчанию "нет"

Здесь записывается разница между активным и пассивным режимом здесь . Ключевым моментом является то, что для команд ftp (включая mkdir и chdir, который работает в вопросе OP) используется один открытый порт - обычно порт 21 - Но для передачи данных используется другой, возможно, заблокированный брандмауэром порт. Проблемы с ftp, связанные с брандмауэром, могут иногда показывать симптомы, упомянутые выше.

2 голосов
/ 23 декабря 2011

Отключение брандмауэра Windows решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...