echo를 이용하여 메시지를 출력할 때 시간을 같이 출력하는 스크립트
- echo의 속성을 파라미터로 전달받아, message속성에 현재 시간만 추가하여 출력하는 macrodef 작성
- macrodef에서 사용하는 현재 시간은 <tstamp>를 사용하지 않고, javascript를 이용하여 계산
(tstamp는 현재시간을 property에 세팅하는데, property는 값을 재 세팅할 수 없으므로, 한번 시간이 세팅되면, 다음부터 시간이 재 세팅될 수 없다. 이에 반해, javascript를 이용하면, property에 값을 재세팅할 수 있다.- “Ant – property값 변경” 참조)
<target name="test"> <echo message="hello world"/> <echo.with.time message="hello world"/> </target> <macrodef name="echo.with.time"> <attribute name="message" default=""/> <attribute name="file"/> <attribute name="append" default="false"/> <attribute name="level" default="warning"/> <attribute name="encoding" default=""/> <attribute name="force" default="false"/> <sequential> <set.curr.time now.time.prop="now.time"/> <echo message="@{message} [${now.time}]" file="${file}" append="${append}" level="${level}" encoding="${encoding}" force="${force}" /> </sequential> </macrodef> <!-- this scriptdef only can be run under Ant 1.8.3 later with bsf.jar 2.4 or later (include commons-logging.jar and js.jar with 1.5R4 and higher) see more at ant scriptdef task manual --> <scriptdef name="set.curr.time" language="javascript" manager="bsf"> <attribute name="now.time.prop"/> <![CDATA[ var now = new Date(); var nowTime = now.getFullYear() + "/" + (now.getMonth()+1) + "/" + now.getDate() + "/" + now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds(); //self.log(nowTime); var propName=attributes.get("now.time.prop"); project.setProperty(propName, nowTime); ]]> </scriptdef>