这则教程是使用Ant的JavaScript和XSLT的汇总,阅读对象适合于中高级的WEB界面开发者。简述之,见笑了。
这则教程来自于Ant使用的邮件列表和手册,社区和论坛提供了更多的和更新的资讯,如果有一些涉及到不公开和版权的问题,请联系作者修改内容。
本文档中所有的邮件地址都做了反网络爬虫处理,替换at为@就是真正的邮件地址。
警告:不对本文的正确性、及时性以及由本文造成的损失负责。本文版权属于开源社区,可以自由拷贝、修改、转帖,请对自己复制和转发等行为负全责。
最新文档参见:http://www.sitepen.com/ant/javascript.html.
啥是Ant?
Apache Ant是一个构建工具,有N多用户使用。总的来说是非常适用于经常需要客户端界面开发的人,特别是处理巨多页面的开发者,比如某君经常需要处理SSI、php、asp或者jsp页面。当然了,也很适合构建一个XSLT的站点(比如XALAN)。如果你对Ant不熟的话,先读手册,看看咋安装、咋使用。
为啥要说Ant里面的JavaScript?
Ant并不具备向递归这样的标准程序指令,不过包含了你可以使用你熟悉语种的预构建任务。JavaScript很容易使用,广为人知,也就很容易添加到Ant扩展里面去。
添加JavaScript到Ant里面去
从mozilla上下载Ant可选jar包:bsf.jar、rhino.jar(重命名成js.jar和rhino.jar),添加到classPath里面去,注意老版本Ant可能不支持,所以版本号要搞对,不要混搭。
添加Ant的XSLT
要添加一个XSLT解析引擎,比如Xalan-J-2,你要下载并配置一下:要添加xalan的jar包到ant的classPath下面。
Hello World例子
看看这个Hello World例子,必须的:
<project name="helloWorld" default="main" basedir="."> <target name="setup"> <script language="javascript"> <![CDATA[ echo = helloWorld.createTask("echo"); main.addTask(echo); echo.setMessage("Hello World!"); ]]> </script> </target> <target name="main" depends="setup"/> </project> generates: setup: main: Hello World! BUILD SUCCESSFUL
要把JavaScript引入到Ant里面去,就要像使用XML标签一样使用一个script标签。要定义脚本语言,使用老式的语言定义方法也可以,比如设置一个src属性在script标签里面。
生成对象
要让Ant做更有去的事情,就要访问properties、targets、和references,怎么搞,看手册。
project.getProperty(string propertyName);
project.getUserProperty(string propertyName);
project.getTarget(string targetId);
project.getReference(string refereceId);
project可以通过getProject()取得,返回这个可以打日志和其他使用扩展的script task。
如果你搞了重名或者重ID的东西,那么只有最后一个才生效。
XSLT Task
要使用标准的XSLT task,需要一个输入和一个输出文件,把参数传给样式表,见下:
<style in="src/webProject.xml" out="temp/index.html" extension="html" style="webSite.xsl" processor="trax"> <param name="pageId" expression="com.sitepen.pages.home"/> </style>
要处理整个文件夹的文档,就要这么搞:
<style basedir="." destdir="temp" extension="html" style="style/webSite.xsl"/>
也可以传N多参数:
<project name="siteBuilder" default="deploy" basedir="."> <target name="init"> <property name="runDir" value="." /> <property name="varsDir" value="vars" /> <property name="sourceDir" value="src" /> <property name="outputDir" value="www" /> <property name="tempDir" value="temp" /> <property name="tokenValues" value="tokenValues.properties" /> <property file="${varsDir}/${tokenValues}" /> </target> <target name="clean" depends="init"> <delete includeEmptyDirs="true" > <fileset dir="${outputDir}" /> </delete> </target> <target name="prepare" depends="clean"> <mkdir dir="${outputDir}" /> </target> <target name="compile" depends="prepare"> <copy todir="${tempDir}"> <fileset dir="${sourceDir}"> <exclude name="**/*.html"/> </fileset> </copy> <script language="javascript"> <![CDATA[ importClass(java.io.File) xslt = siteBuilder.createTask("style"); runDirectory = siteBuilder.getProperty("runDir"); tempDirectory = siteBuilder.getProperty("tempDir"); inFile = new File(runDirectory + "/webProject.xml"); outFile = new File(tempDirectory+"/index.html"); xslt.setStyle("webSite.xsl"); xslt.setIn(inFile); xslt.setOut(outFile); xslt.setProcessor("trax"); idParameter = xslt.createParam(); idParameter.setName("pageId"); idParameter.setExpression("com.sitepen.pages.home"); xslt.execute(); ]]> </script> </target> <target name="deploy" depends="compile,init"> <copy todir="${outputDir}"> <fileset dir="${tempDir}"> <exclude name="**/*.xml"/> </fileset> </copy> <delete includeEmptyDirs="true" > <fileset dir="${tempDir}" /> </delete> </target> </project>
用JavaScript去遍历一个properties文件
*** 我还没试过,因为看起来property文件必须要有一定的特征(NND,这什么玩意,看不懂) ***
用Task来循环
Ant本身是不支持循环机制的,所以很多人就用JavaScript来做到循环。比如可以创建一堆文件夹:
<![CDATA[
importClass(java.io.File); //Java class needed for file creation
var directoryNames = new Array();
directoryNames[0] = "directoryName0";
directoryNames[1] = "directoryName1";
directoryNames[2] = "directoryName2";
// … and so on
// in this example, the directory path is stored as part of the directory name.
for (i=0;i<directoryNames.length;i++)
{
// projectName is the name of your project
makeDirectory = projectName.createTask("mkdir");
directory = new File(directoryNames[i]);
makeDirectory.setDir(directory);
makeDirectory.execute();
}
]]>
原文在:http://www.sitepen.com/blog/2001/09/25/javascript-and-ant/