2012-12-03 96 views
1

我想創建一些ant目標來上傳和下載各種文件到Amazon S3。我一直在使用S3Sync成功的命令行,所以我覺得還是把這個包在Ant EXECAnt exec的行爲與S3Sync的命令行不同

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

所有配置的是在配置文件中S3Sync使用。我想添加一些參數,並在某個時候包裝在macrodef中,但我在這個例子中保持簡單。

不幸的是,該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) 

我試過設置目錄,spawn,vmlauncher和其他exec屬性,但無濟於事。

對我可以嘗試的事情有任何想法嗎?

螞蟻1.8.4,Windows 7的

回答

4

好像S3Sync試圖清除進度行,因爲它無法訪問控制檯失敗。這很有意義,因爲在Ant下運行時,您確實沒有控制檯 - 至少不是您可以執行的控制檯所有 I/O命令。

您是否嘗試添加-ShowTransferProgress false參數?

+0

-ShowTransferProgress虛假的伎倆。謝謝! – RichH

0

這是我的宏定義,其他任何人都會發現它們很有用。我的鑰匙和其他設置都在我的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}" />