一般来说。ant的任务都是要写一个build.xml文件,然后删删改改,最后运行ant target。这自是正途。但是有时候,如果你需要的就是简单试验一下某个task,或者就想拿某个ant task当成shell命令的话,就不方便了。
在Neptune这个工具里面,附带了一个shell。这个shell允许交互执行Neptune的Command和Ant的Task。可以在这里下载:
http://docs.codehaus.org/display/JASKELL/Downloads
下面简要介绍一下怎么用:
启动Neptune shell很简单。按照要求安装完了之后(就是设置一个NEPTUNE_HOME和PATH环境变量),运行:
先看看最简单的ant echo任务。xml语法是这样的:
稍微解释一下:
1。所有ant命令都在ant这个namespace里面。
2。xml的尖括号换成大括号。大括号在jaskell语言里面表示一个tuple。
3。exec函数用来执行一个命令。如果没有exec,ant.echo只是生成一个命令对象,但不执行。这样做得好处是,你可以用变量临时存储这些命令对象,可以把他们存在任意的对象或者数组中,等到真正需要执行的时候再运行。
4。"->"这个函数用来以先参数后函数的循序调用函数,相当于exec(ant.echo{...}),语法上有的时候显得更漂亮些。
再来看个复杂点的。前两天我发现需要把某个目录下所有反编译出来的jad文件改名成java文件。dos的rename命令居然不支持。于是我就祭起法宝:
这个东西定义了一个函数,接下来,我就可以拿rename当作一个简洁的命令了:
后来,我把这个rename函数稍微完善了一下,增加了一个recursive参数来控制是否处理子目录,缺省值是false,给dir设置当前目录为缺省值。代码放在一个可以重用的脚本文件里面。现在可以这样做了。先把函数加载进来:
然后调用:
呵呵。
这个工具可以调用任意的ant任务。还有很多好用的函数。具体请见:
http://docs.codehaus.org/display/JASKELL/Neptune
在Neptune这个工具里面,附带了一个shell。这个shell允许交互执行Neptune的Command和Ant的Task。可以在这里下载:
http://docs.codehaus.org/display/JASKELL/Downloads
下面简要介绍一下怎么用:
启动Neptune shell很简单。按照要求安装完了之后(就是设置一个NEPTUNE_HOME和PATH环境变量),运行:
np
-
i
shell启动后,你可以看见:
Neptune Interactive
>
这个">"是命令提示符。现在你可以输入命令了。
>
先看看最简单的ant echo任务。xml语法是这样的:
<
echo message
=
"
hello world
"
/>
对应的neptune语法是
>
ant.echo{message
=
"
hello world
"
}->exec
>
>
starting command Echo ...
task Echo: hello world
command Echo executed.
稍微解释一下:
1。所有ant命令都在ant这个namespace里面。
2。xml的尖括号换成大括号。大括号在jaskell语言里面表示一个tuple。
3。exec函数用来执行一个命令。如果没有exec,ant.echo只是生成一个命令对象,但不执行。这样做得好处是,你可以用变量临时存储这些命令对象,可以把他们存在任意的对象或者数组中,等到真正需要执行的时候再运行。
4。"->"这个函数用来以先参数后函数的循序调用函数,相当于exec(ant.echo{...}),语法上有的时候显得更漂亮些。
再来看个复杂点的。前两天我发现需要把某个目录下所有反编译出来的jad文件改名成java文件。dos的rename命令居然不支持。于是我就祭起法宝:
>
rename {dir,from,to}
=
ant.move{todir
=
dir}.with [
> ant.types.fileset{dir}.with [
> ant.types.include{name = " **/$from " }
> ],
> ant.types.mapper{type = " glob " ,from,to}
> ] ->exec
>
=> rename()
> ant.types.fileset{dir}.with [
> ant.types.include{name = " **/$from " }
> ],
> ant.types.mapper{type = " glob " ,from,to}
> ] ->exec
>
=> rename()
这个东西定义了一个函数,接下来,我就可以拿rename当作一个简洁的命令了:
>
rename{dir
=
"
decompiled
"
,from
=
"
*.jad
"
,to
=
"
*.java
"
}
>
starting command Move![]()
command Move executed.
>
>
starting command Move
command Move executed.
>
后来,我把这个rename函数稍微完善了一下,增加了一个recursive参数来控制是否处理子目录,缺省值是false,给dir设置当前目录为缺省值。代码放在一个可以重用的脚本文件里面。现在可以这样做了。先把函数加载进来:
>
helper
=
import
{resource
=
"
jfun/neptune/ant/anthelper.jsl
"
}
>
>
然后调用:
>
helper.rename{
from
=
"
*.jad
"
,to
=
"
*.java
"
,recursive=true}->exec
>
>
呵呵。
这个工具可以调用任意的ant任务。还有很多好用的函数。具体请见:
http://docs.codehaus.org/display/JASKELL/Neptune