| 知乎专栏 |
arg value 与 arg line
arg line 可以处理参数的空格, 而arg value则不能. arg line 可以处理空参数, arg value传递空参数会报错.
<exec executable = "sh" dir = "@{dir}">
<arg line = "ls -l /var/log" />
</exec>
<exec executable = "ls" dir = "@{dir}">
<arg value = "-l" />
<arg value = "/var/log" />
</exec>
<macrodef name="mvn">
<attribute name="options" default="" />
<attribute name="goal" default="" />
<attribute name="phase" default=" " />
<attribute name="dir" default="" />
<element name="args" optional="false" />
<sequential>
<exec executable="mvn" dir="@{dir}" >
<arg value="@{options}" />
<arg value="@{goal}" />
<arg value="@{phase}" />
</exec>
</sequential>
</macrodef>
<!-- 执行下面宏将会出错,你必须传递options,phase参数 -->
<mvn goal="package" dir="${project.dir}"/>
<!-- 将vale改为line后正常 -->
<exec executable="mvn" dir="@{dir}" >
<arg line="@{options}" />
<arg line="@{goal}" />
<arg line="@{phase}" />
</exec>
运行方式sequential为顺序执行, parallel为并行执行。
<macrodef name = "git">
<attribute name = "command" />
<attribute name = "dir" default = "" />
<element name = "args" optional = "true" />
<sequential>
<echo message = "git @{command}" />
<exec executable = "git" dir = "@{dir}">
<arg value = "@{command}" />
<args/>
</exec>
</sequential>
</macrodef>
<macrodef name = "git-clone-pull">
<attribute name = "repository" />
<attribute name = "dest" />
<sequential>
<git command = "clone">
<args>
<arg value = "@{repository}" />
<arg value = "@{dest}" />
</args>
</git>
<git command = "pull" dir = "@{dest}" />
</sequential>
</macrodef>
<git command = "clone">
<args>
<arg value = "git://github.com/280north/ojunit.git" />
<arg value = "ojunit" />
</args>
</git>
<git command = "pull" dir = "repository_path" />
<git-clone-pull repository="git://github.com/280north/ojunit.git" dest="ojunit" />
<macrodef name="rsync">
<attribute name="option" default="auzv" />
<attribute name="src" default="" />
<attribute name="dest" default="" />
<element name="args" optional="true" />
<sequential>
<exec executable="rsync">
<arg value="@{option}" />
<arg value="@{src}" />
<arg value="@{dest}" />
<args />
</exec>
</sequential>
</macrodef>
<target name="deploy" depends="compile">
<rsync option="-auzv" src="${project.dest}" dest="${remote}:${destination}">
<args>
<arg value="-P" />
</args>
</rsync>
</target>
<macrodef name="ssh">
<attribute name="host" />
<attribute name="command" />
<attribute name="keyfile" default="~/.ssh/id_rsa" />
<element name="args" optional="true" />
<sequential>
<exec executable="ssh">
<arg value="@{host}" />
<!-- arg value="-i @{keyfile}" / -->
<args />
<arg value="@{command}" />
</exec>
</sequential>
</macrodef>
<target name="stop" depends="">
<!-- ssh host="${remote}" command="/srv/apache-tomcat/bin/catalina.sh stop -force" keyfile="~/.ssh/id_rsa" / -->
<ssh host="${remote}" command="/srv/apache-tomcat/bin/shutdown.sh" />
</target>
<target name="start" depends="">
<ssh host="${remote}" command="/srv/apache-tomcat/bin/startup.sh" keyfile="~/.ssh/id_rsa" />
</target>
<macrodef name="mvn">
<attribute name="options" default="" />
<attribute name="goal" default="" />
<attribute name="phase" default=" " />
<attribute name="dir" default="" />
<element name="args" optional="false" />
<sequential>
<exec executable="mvn" dir="@{dir}" >
<arg line="@{options}" />
<arg value="@{goal}" />
<arg line="@{phase}" />
</exec>
</sequential>
</macrodef>