Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

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

Posted on 01/24/201110/08/2024 by 四火

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 脚本,我在这里就不展开了。

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

×Scan to share with WeChat

你可能也喜欢看:

  1. 一个前端项目,到底要集成多少库和工具
  2. 模板引擎随谈
  3. 设计之美
  4. JavaScript 使用 for 循环时出现的问题
  5. 跨域方法汇总

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
  • Anonymous on 我裸辞了
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme