脚本语言可以做什么?说说 Ant、Maven 和 Gant

ant 本人也稍微用了一些脚本语言了,可是在同事的反馈给我的印象中,脚本语言似乎从未得到正名,似乎总是寒酸和小打小闹的代名词 。我在做一个门户网站,身边有一些公司和某一些开发人员,总是对于页面上的技能很轻视,殊不知用户体验(也许我专指 UCD)恰恰是对用户影响最大的部分,对 Portal 来说,更胜于功能。同样类比,脚本语言亦扮演着看似无足轻重,但实际非常重要的作用。

脚本语言可以做什么?适合做什么?能想到的,似乎总是敏捷、快速、轻量的东西,说得冠冕堂皇一点,就是能把人从繁重的重复劳动中解脱出来;还有,就是很适合运行在客户端,做一些简单的解析和对用户体验的协助,这不也是因为它敏捷、快速和轻量吗?

关于脚本语言,今天我不说浏览器端的 JavaScript、VBScript,不说操作系统的 bat、shell,就说说 Ant、Maven 和 Gant。

Ant

Ant 是我用得最多的,任何的语言在编写的时候都要讲究条理、层次和逻辑,ant 作为诞生比较早的脚本语言,也是如此。其实严格说,ant 只不过是定义的一系列标签而已,非常简单的语法,把一个个标签嵌套起来,串起来使用即可。后来能够接触到一些动态语言,perl、ruby 等,这些语法就比 ant 要轻快得多了。

Ant 经常使用的功能:拷贝粘贴这一类的不说了,还有:打包(jar/war/tar/zip)、compile、concact、Sql(这个东西不太好用,经常以 ant 调用 sqlplus 代替)、JavaDoc、LoadProperties、FTP、SSH、JUnit。

我经常使用的 Ant 扩展插件,包括 SVN 插件、XML 插件、Contrib 插件(主要是逻辑能力,包括 if、for 等等这种 Ant 默认不支持的能力)。

在管理项目的时候,经常需要使用 Ant 来编写脚本,便于完成打包、校验、上库、部署、更新、测试等等工作,自动化脚本的成熟程度,也一定程度上标志着项目的成熟程度。

值得一提的是 Ant 里面的 JavaScript。从 mozilla 上下载 Ant 可选 jar 包:bsf.jar、rhino.jar(重命名成 js.jar 和 rhino.jar),添加到 classPath 里面去,注意老版本 Ant 可能不支持,所以版本号要搞对,不要混搭。然后要添加一个 XSLT 解析引擎,比如 Xalan-J-2,你要下载并配置一下:要添加 xalan 的 jar 包到 ant 的 classPath 下面。

<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>

运行以后,就看到:

setup:

main: 
Hello World!

BUILD SUCCESSFUL

Maven

Maven 我接触得不多,Maven 是基于项目对象模型 (POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。所以,严格说来,Maven 早就超越了脚本语言的概念,是一个真正适用于工程和项目管理级别的工具。

借用官网上的例子,可见上手也是非常简单的:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

这里有一个 Maven 和 Ant 之间的对比:

different_maven_ant

其中提到了一点,Ant 的构建规则通常是静态的,除非用 Script Ant 来做,当然,使用 Contrib 插件也可以做到。

Gant

说到现在 Ant 和 Maven 还是没有脱离 XML 的约束, Gant 就不同了。Gant 是一个基于 Ant 的构建工具,它采用 Groovy 脚本代替 XML 来编写构建逻辑。Gant 完全依赖于 Ant task 来做真正的事情,所以如果用 Ant 实现构建,但不喜欢用 XML 构建文件,Gant 是一个不错的选择。(这里 有一个简易教程)

Ant.echo(message : 'running build.gant')

Ant.property(file : 'build.properties')
def antProperty = Ant.project.properties

target(init : 'init target') {
    echo(message : 'Executing init target')
}

target(hello : 'say hello target') {
    depends(init)

    echo(message : antProperty.'echo.msg')
}

setDefaultTarget(hello)

可以看到 Gant 就是写 groovy 脚本,我在这里就不展开了。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》

138,984 次阅读

发表评论

电子邮件地址不会被公开。

back to top