2012-04-17 160 views
0

在您的題目之一中,名爲「在ant中輸出時間戳」中,我已經測試了2種解釋方式以顯示幾次在同一個Ant腳本中。如何使用Ant顯示多個日期/時間,就像您的主題「在ant中輸出時間戳」

但是,這2個解決方案不適合我,螞蟻給我所有的時間相同的日期/時間。

有人可以解釋我爲什麼?

我已經找到了解決辦法(但要注意很perfet我記):

<tstamp> 
    <format property="date.etape1" pattern="dd/MM/yyyy HH:mm:ss" /> 
</tstamp> 
<echo message="${date.etape1} bla bla bla...." /> 
<tstamp> 
    <format property="date.etape2" pattern="dd/MM/yyyy HH:mm:ss" /> 
</tstamp> 
<echo message="${date.etape2} bla bla bla...." /> 

如果有人可以解釋我如何使工作的主題是「螞蟻輸出時間戳」的2個解決方案之一,我會很開心!

+0

如果我沒有記錯的我,如果你使用標籤,你可以在運行時訪問$ {DSTAMP}和$ {} TSTAMP然後格式化它們。不過,我可能會誤解你的問題。 – BigMike 2012-04-17 08:59:52

+0

是的,但在這個網站上發現代碼此示例一點兒也不工作對我來說:<目標名稱= 「TESTME」> <睡眠秒= 「5」> <格式屬性= 「current.time」 圖案= 「MM/DD/YYYY HH:MM:SS AA」/> <回聲消息= 「RUN_TIME:$ {current。時間}「/> 2012-04-17 09:08:28

+0

嘗試使用標準指令,如http://ant.apache.org/manual/Tasks/tstamp.html所示,並在中使用 BigMike 2012-04-17 09:14:46

回答

1

根據TSTAMP來源它應該工作(來源here)Date對象總是實例化。也許有一些奇怪的任務循環在表面之後進行?

我想這個Ant構建文件

<project name="testTStamp" default="xxx" basedir="."> 
    <target name="testMe"> 
     <MyTimestamp> </MyTimestamp> 
     <sleep seconds="5"> </sleep> 
     <MyTimestamp> </MyTimestamp> 
    </target> 

    <macrodef name="MyTimestamp"> 
     <sequential > 
      <tstamp> 
       <format property="current.time" pattern="MM/dd/yyyy hh:mm:ss aa"/> 
      </tstamp> 
      <echo message="RUN_TIME: ${current.time}"/> 
     </sequential> 
    </macrodef> 

    <target name="default"> 
     <tstamp> 
      <format property="current.time_one" pattern="MM/dd/yyyy hh:mm:ss.SSS aa"/> 
     </tstamp> 
     <echo message="RUN_TIME: ${current.time_one}"/> 
     <sleep seconds="5"> </sleep> 
     <tstamp> 
      <format property="current.time_two" pattern="MM/dd/yyyy hh:mm:ss.SSS aa"/> 
     </tstamp> 
     <echo message="RUN_TIME: ${current.time_two}"/> 
    </target> 

    <target name='xxx' depends='default, testMe' /> 
</project> 

好了,如果在默認的目標,我也改變格式屬性的名稱,它的工作原理。所以後面有一些緩存magik。

+0

這讓我瘋狂!這個代碼示例看起來很好看,爲什麼它不起作用?這不是邏輯! – 2012-04-17 09:52:23

+0

@Jeffberthon:檢查我的示例中的默認任務,它實際上起作用。我想這涉及到一些緩存。黑客TSTAMP的來源我已經檢查過,java.util.Date對象是在執行任務時分配的,所以它應該可以工作。如果你使用不同的屬性名稱正在工作。但是很奇怪。 – BigMike 2012-04-17 09:54:05

+0

嗨BigMike,它是我找到的唯一解決方案,但它不是邏輯......如果我想在同一個Ant腳本中顯示5個日期/時間,我必須聲明五個proerty /名稱不同......我繼續像這樣....謝謝你看我的問題;-)再見。 – 2012-04-17 14:27:30

0

Properties在Ant中是不可變的;他們是而不是變量。

但是,通過使用<local>任務,您可能可以達到您想要的效果。此任務會導致僅在本地指定target(或sequential或任何其他塊)中設置的屬性。

所以如果你所有的時間戳回聲都在不同的目標,那麼它會工作。在單個目標中,您仍然需要使用多個屬性,如「time_start」,「time_end」等。

0

在此主題後面,我已經讀過macrodef是一個更合適的方法,因爲它每次調用時都會實例化,所以沒有緩存問題。我簡化了他們的例子。我包含了我的整個文件,所以你可以將下面的代碼保存爲clock.xml並直接從ant運行。

<project name="marktime" basedir="."> 
<description> 
    logstamp is a simple macrodef for ANT to echo a time stamp out to an open log. 
    It is not written to pass back the current time, just simple echo to stdout. 
      You are welcome to add which file to output the results to, add blurbs to messages. 

</description> 

<macrodef name="logstamp"> 
    <sequential> 
    <local name="logtime"/> 
    <tstamp> 
    <format property="logtime" pattern="yyyy.MM.dd : HH:mm:ss z"/> 
    </tstamp> 
    <echo message=" ### Current time now: ${logtime}"/> 
    </sequential> 
</macrodef> 

<target 
name="init" 
description="boilerplate for all targets"> 
    <!-- Just run the Macrodef --> 
<logstamp/> 
<sleep seconds="5"> </sleep> 
<logstamp/> 
<sleep seconds="5"> </sleep> 
<logstamp/> 
<sleep seconds="5"> </sleep> 
<logstamp/> 
<sleep seconds="5"> </sleep> 
<logstamp/> 
</target> 
</project> 

結果如下:

C:\desktop\>ant -f clock.xml init 
Buildfile: C:\desktop\clock.xml 

init: 
    [echo] ### Current time now: 2014.02.14 : 16:41:06 PST 
    [echo] ### Current time now: 2014.02.14 : 16:41:11 PST 
    [echo] ### Current time now: 2014.02.14 : 16:41:16 PST 
    [echo] ### Current time now: 2014.02.14 : 16:41:21 PST 
    [echo] ### Current time now: 2014.02.14 : 16:41:26 PST 

BUILD SUCCESSFUL 
Total time: 20 seconds