• Ant的故事


    Ant的来历

    前段时间在学习淘宝的前端框架Kissy,在项目开发指南中看到了Ant,由于以前听过,所以来了兴趣。正如上篇文章所说,前端实践非常重要,于是就从头到尾研究起Ant来。。

    说来,Ant来自Java,是一个基于Java的build工具。和Unix/Linux c中的make工具类似,不过由于Java的原因具有跨平台的优势。那么Ant和前端有半毛线关系么?答案是,哈哈~~

    对前端来说,Ant可以

    • 合并js和css文件
    • 压缩js和css文件
    • 生成jsDOC文档
    • 连接FTP,将代码上传到指定服务器
    • 自动上传到SVN,自动打包成zip文件 + …. frontend 当然这些都是网上抄来的,没有一一实验。喜欢的还是合并、压缩、文档,也都自己从0开始慢慢摸索了下,总结记录一下,方便对她有兴趣的朋友..

    Ant的入门

    首先我们安装Ant的环境。

    安装jdk的步骤就不细说,度娘那里有很多。

    下载Ant,传送门:apache-ant-1.9.0 .解压到你喜欢的位置,我是F:\apache-ant-1.9.0.

    在path里面添加:F:\apache-ant-1.9.0.\bin

    在DOS里面输入ant,验证安装是否完成。出现下面的结果就算成功了

     Buildfile:build.xml does not exist! 
     Build failed 

    牛刀小试

    新建test的java项目,里面建立src目录,在src里面写一个hello.java,内容如下

    public class HelloWorld {
       public static void main(String[] args) {
           System.out.println("hello world!");
       }
    }

    在test目录里面建立build.xml文件。内容如下:

    <?xml version="1.0" ?>
    <project name ="javacTest" default="run" basedir=".">
        
        <target name="compile">
            <mkdir dir ="${basedir}/build/classes"/>
            <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/>
        </target>
        <target name="run"  depends ="compile">
            <java classname ="HelloWorld">
                <classpath>
                   <pathelement path="${basedir}/build/classes"/>
                </classpath>
           </java>
        </target>
    </project>

    用命令行进入test目录里面,执行ant。你会发现build里面多了classes目录,classes里面多了hello.class。在命令行里面会有hello world输出。如下图:

    1

    这次不准备讲ant的api,有兴趣的童鞋可以去看官方文档。这里我把遇到的讲一下,相信这样你也能掌握常见的语法了~

    上面的build.xml中,就是我们的主角Ant了。每个Ant都有且只能有一个project,多个target(可理解为任务块),depends=”compile”指必须名字为compile的target先执行,他们存在依赖关系。其他的就不解释了。

    Ant和前端。

    合并js

    在test目录里面建四个js文件内容依次为console.log(“hello, i am from 1/2/3/4”);然后建立build.xml内容为:

    <?xml version="1.0"?>
    <project name="concat" default="build">
        <property name="concat.note" value="//合并js" />
        <target name="build">
            <echo>生成src目录</echo>
            <mkdir dir="src"/>
            <echo>开始合并文件</echo>
            <concat destfile="src/fs.js">
                <header trimleading="yes">${concat.note}
                </header>
                <path path="1.js"/>
                <path path="2.js"/>
                <path path="3.js"/>
                <path path="4.js"/>
            </concat>
        </target>
    </project>

    CMD切换到test目录,执行ant。输出

    2

    在src里面多了fs.js文件,内容为:

    3

    现在解释上面的build.xml。property定义一个名为concat.note的变量,内容为”//合并js”,下面会用${concat.note}引用。header是给fs.js最上面加一行。下面的合并就那样,都看得懂,记住格式就好了。提示一点是header那里有换行,如果不换,自己试试后果,呵呵。

    有些童鞋就在想了,要是我有20个js,是不是要写20个path呢?当然不是!为了解决这个问题,我们的dadaType标签就闪亮登场啦~

    把path变成

    <fileset dir = "./" includes = "**/*.js">

    就可以代替20个path!dataType常用除了我们见过的fileset/path,还有我们在压缩和生成文档要用的argument。fileset还有一个常用的语句,如下:

    <fileset dir = "./">
        <include name = "**/*.js" if = "test">
        <exclude name = "my.js" unless = "my">
    </fileset>

    如果设置了test属性,读取所有js,如果没有设置my属性,则排除my.js

    压缩js

    先下载YUICompressor

    运行解压过后的install.cmd。(用管理员身份运行,否则会出错哦)

    然后随便右键一个文件就就会多一个Process with YUICompressor了。

    把刚才解压的YUICompressor放到test目录中,新建一个min文件夹。把build.xml改成如下:

    <?xml version="1.0"?>
    <project name="refund" default="build">
    <dirname property="current.dir" file="${ant.file.uploader}"/>
        <property name="src.dir" location="${current.dir}/src/"/>
        <property name="yuicompressor.path"   location="${current.dir}/yuicompressor/yuicompressor.jar"/>
        <target name="build">
            <apply executable="java" dest="${current.dir}/min">
                <fileset dir="${src.dir}" includes="*.js"/>
                <arg line="-jar"/>
                <arg path="${yuicompressor.path}"/>
                <arg value="-o"/>
                <targetfile/>
                <mapper type="glob" from="*.js" to="*-min.js"/>
            </apply>
        </target>k
    </project>

    然后运行ant命令。在min文件夹里面就会出现:

    4

    解释上面的build.xml.dirname用来获取文件的目录路径。注意到里面有个变量指向yuicompressor.jar,这样才能用YUICompressor。这里的arg提供给apply一些参数。-jar为YUICompressor中的.jar路径,就是刚才提到的那个变量。mapper定义源文件和目标文件的关联方式,这里是把.js变成-min.js。

    生成文档的方式和压缩差不多,用的是jsdoc toolkit。偷下懒,这里就不演示了。

    对于我们来说,如果压缩的文件就那么两个,手动就好了。如果多了,就要用Ant了。合并的时候要注意我们的js的顺序,比如jquery一定要在bootstrap.js的前面,注意他们的依赖关系。

    本文的参考文章:

    明河的电子书

    Apache Ant手册

    Top 15 Ant Best Practices

  • 相关阅读:
    站立会议第二天
    站立会议第一天
    Scrum_Sprint
    电梯演讲之加减乘除
    The group WHATEVER is formed today
    awk简介(使用方法)
    关于Java进程流程简介
    Bootstrap_导航
    Bootstrap_按钮工具栏
    Bootstrap_下拉菜单
  • 原文地址:https://www.cnblogs.com/freestyle21/p/3076021.html
Copyright © 2020-2023  润新知