知乎专栏 |
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>