【问题标题】:Ant exec behaves differently to command line with S3SyncAnt exec 的行为与使用 S3Sync 的命令行不同
【发布时间】:2012-12-03 00:56:36
【问题描述】:

我想创建一些 ant 目标来将各种文件上传和下载到 Amazon S3。我一直在命令行中成功使用S3Sync,所以我想我只需将其包装在 Ant exec 中

<exec executable="tools/s3sync/S3Sync.exe" failonerror="true" />

所有配置都在 S3Sync 使用的配置文件中。我想添加一些 args 并在某个时候将其包含在一个宏定义中,但我在这个示例中保持简单。

不幸的是,exe 似乎不喜欢从 Ant 运行。

 [exec]
 [exec] Unhandled Exception: System.IO.IOException: The handle is invalid.
 [exec]
 [exec]    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
 [exec]    at System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean& succeeded)
 [exec]    at System.Console.get_WindowWidth()
 [exec]    at S3Sync.Program.ClearProgressLines()
 [exec]    at S3Sync.Program.WriteConsoleLineClear(String InputLine)
 [exec]    at S3Sync.Program.WriteToLog(String LogLine, Int32 LogLineLevel)
 [exec]    at S3Sync.Program.Main(String[] args)

我尝试设置 dir、spawn、vmlauncher 和其他 exec 属性,但无济于事。

对接下来我可以尝试的事情有什么想法吗?

蚂蚁 1.8.4,Windows 7

【问题讨论】:

    标签: ant amazon-s3


    【解决方案1】:

    似乎 S3Sync 正在尝试清除进度线,但由于无法访问控制台而失败。有道理,因为在 Ant 下运行时您并没有真正的控制台 - 至少没有可以执行 all I/O 命令的控制台。

    您是否尝试添加-ShowTransferProgress false 参数?

    【讨论】:

      【解决方案2】:

      这里是我的宏定义,供其他人使用。我的密钥和其他设置在我的 s3Sync.exe.config 中设置

      <macrodef name="s3upload">
          <attribute name="bucket"/>
          <attribute name="logOnly" default="${s3upload.log.only}"/>
          <attribute name="localFolder"/>
          <sequential>
              <exec executable="${s3sync.exe}" failonerror="true">
                  <arg line="-SyncDirection upload"/>
                  <arg line="-LogOnlyMode @{logOnly}"/>
                  <arg line="-BucketName @{bucket}"/>
                  <arg line="-LocalFolderPath @{localFolder}"/>
                  <arg line="-ShowTransferProgress false"/>
                  <arg line="-UploadHeaders x-amz-acl:public-read"/>
              </exec>
          </sequential>
      </macrodef>
      
      <macrodef name="s3download">
          <attribute name="bucket"/>
          <attribute name="logOnly" default="false"/>
          <attribute name="localFolder"/>
          <sequential>
              <exec executable="${s3sync.exe}" failonerror="true">
                  <arg line="-SyncDirection download"/>
                  <arg line="-LogOnlyMode @{logOnly}"/>
                  <arg line="-BucketName @{bucket}"/>
                  <arg line="-LocalFolderPath @{localFolder}"/>
                  <arg line="-ShowTransferProgress false"/>
              </exec>
          </sequential>
      </macrodef>
      

      他们被这样使用

      <s3download bucket="${s3.logs.bucket}" localFolder="${local.logs.path}" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-21
        • 2014-08-08
        • 1970-01-01
        • 2019-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        相关资源
        最近更新 更多