`

翻译:JavaScript and Ant

阅读更多

这则教程是使用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/

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics