• [转]Apache Ant安装及使用


    ant是jakarta一个非常好的OpenSource子项目,是基于java的编译工具。下面简单介绍一下在 Linux 及 Windows 环境中如何安装ant:

      1.下载
      从 http://ant.apache.org/bindownload.cgi 可以下载最新的tar包:apache-ant-1.6.2.tar.gz,如果是windows环境则是zip文件,解压后,在系统环境变量里设置 ANT_HOME为f:\project\tools\apache-ant-1.6.2,并将f:\project\tools\apache- ant-1.6.2\bin目录添加到classpath中,然后就可以使用了

      2./l安装,解压到/usrocal下
    > tar zxpvf apache-ant-1.6.2.tar.gz
    > ln -s apache-ant-1.6.2 ant

      3.设置环境
      将ANT_HOME设置到当前用户的.bash_profile文件/home/admin/.bash_profile

    [admin@tangtang home]$ su - admin
    [admin@tangtang home]$ vi .bash_profile
    export ANT_HOME=/usr/local/ant
    export PATH=/usr/local/ant/bin:$PATH

      如果是windows环境,需要设置%ANT_HOME%,并把%ANT_HOME%\bin目录全路径加入到%path%中

      4.测试
      用ant命令测试运行情况
    [admin@tangtang home]$ ant
    Buildfile: build.xml does not exist!
    Build failed

    [admin@tangtang home]$ ant -version
    Apache Ant version 1.6.2 compiled on July 16 2004

      若出现这样的错误:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher
      这是linux系统默认安装了一些ant的lib,修改 /etc/ant.conf中 ANT_HOME=/usr/share/ant 为你正确安装ant的地址,如 /usr/local/ant

      5、build脚本
      如果是在linux环境中,下面是build脚本的一个范例:
    #build脚本
    #! /bin/sh
    # 进入到上级目录
    cd `dirname $0`/..
    # 获取当前目录为PROJECT_HOME
    PROJECT_HOME=`pwd`
    # 设置JAVA_HOME
    export JAVA_HOME=/usr/cyber/java
    # 得到CLASSPATH
    CLASSPATH1=$CLASSPATH
    # 添加CLASSPATH
    CLASSPATH=${PROJECT_HOME}\webapps\WEB-INF\conf:${PROJECT_HOME}\webapps\WEB-INF\classes:$CLASSPATH
    # ant build,-buildfile 参数,是使用自定义的build.xml文件,$@是参数数组
    /usr/local/ant/bin/ant -buildfile ${PROJECT_HOME}/build/build.xml "$@"
    # build脚本结束

      如果是在windows环境中,下面是build.bat脚本的一个范例:
    # build.bat 
    # 关闭echo显示
    @echo off
    # 设置%JAVA_HOME%
    if "%JAVA_HOME%"=="" set JAVA_HOME=f:\tools\java
    # 设置%ANT_HOME%
    if "%ANT_HOME%"=="" set ANT_HOME=f:\tools\ant
    # 设置PROJECT_HOME
    set PROJECT_HOME = %CD%\..
    set CLASSPATH_BAK=%CLASSPATH%
    set CLASSPATH=
    # 执行build
    %ANT_HOME%\bin\ant.bat -buildfile ..\build\build.xml %1 %2 %3 %4 %5 %6 %7 %8 %9

      6、build配置文件
      在${PROJECT_HOME}/build目录下面,需要定义两个文件,一个是build.properties,一个是build.xml
      build.properties文件定义了build的一些常量
    # build.properties
    project = tangtang
    version = 1.1.1
    # 采用classic编译,即采用ant编译
    build.compiler = classic
    # 采用jikes编译
    #build.compiler = jikes

    year = 2004
    debug = on
    optimize = on
    deprecation = on

    os = linux
    author = tangtang
    email = syvin_tom@hotmail.com
    url = www.tangtang.org
    company = tangtang.org

      build.xml文件是ant编译的主要配置文件,ant功能强大,需要通过相应的配置项来表现。
    <?xml version="1.0" encoding="gb2312"?>

    <!-- Build file for project -->

    <project name="cyber" default="jar" basedir=".">
    <property file="${user.home}/.ant.properties" />
    <!-- ant build properties -->
    <property file="build.properties"/>

    <property name="build.dir" value=".."/>
    <property name="build.src" value="${build.dir}/webapps/WEB-INF/src/java"/>
    <property name="build.dest" value="${build.dir}/webapps/WEB-INF/classes"/>
    <property name="build.lib" value="${build.dir}/webapps/WEB-INF/lib"/>
    <property name="build.ext" value="./lib"/>
    <property name="build.tpl" value="${build.dir}/webapps/WEB-INF/templates"/>
    <property name="build.encoding" value="gb2312"/>

    <property name="src.java.dir" value="../src/java"/>
    <property name="javadoc.destdir" value="../docs/api"/>
    <property name="javadoc.link" value="http://www.tangtang.org/java/docs/api/"/>
    <property name="final.name" value="${project}-${version}"/>
    <property name="dist.root" value="${build.dir}/dist"/>
    <property name="dist.dir" value="${dist.root}/${final.name}"/>

    <path id="classpath">
    <pathelement path="${java.class.path}/"/>
    <fileset dir="${build.lib}">
    <include name="*.jar"/>
    </fileset>
    <fileset dir="${build.ext}">
    <include name="*.jar"/>
    </fileset>
    </path>

    <property name="classpath" refid="classpath"/>
    <!-- =================================================================== -->
    <!-- prints the environment -->
    <!-- =================================================================== -->
    <target name="env">
    <echo message="build.compiler = ${build.compiler}"/>
    <echo message="java.home = ${java.home}"/>
    <echo message="user.home = ${user.home}"/>
    <!--echo message="java.class.path = ${java.class.path}"/-->
    <echo message="classpath = ${classpath}"/>
    </target>

    <!-- =================================================================== -->
    <!-- Prepares the build directory -->
    <!-- =================================================================== -->
    <target name="prepare" depends="env">

    <tstamp/>
    <filter token="year" value="${year}"/>
    <filter token="version" value="${version}"/>
    <filter token="date" value="${DSTAMP}"/>     
        <!--
    <mkdir dir="${build.dir}"/>
    <mkdir dir="${build.dest}"/>
    <mkdir dir="${build.src}"/>
        -->
    <!-- chose a class that's from j2ee.jar -->
    <available classname="javax.sql.DataSource"
    property="J2EE.present">
    <classpath refid = "classpath"/>
    </available>
    </target>
    <target name="J2EE-error" depends="prepare" unless="J2EE.present">

    <echo>
    ********************************************************
    **
    ** J2EE has not been found and is needed for the target
    ** you have chosen
    **
    ** Since CLASSPATH is an evil idea, just link or drop
    ** a copy of your j2ee.jar into build/lib directory.
    **
    *********************************************************
    </echo>
    </target>

    <target name="init">
         <echo>
         build init
         build compile
         </echo>
        <mkdir dir="${build.dir}/data"/>    
    <mkdir dir="${build.dir}/logs"/>
    <mkdir dir="${build.dir}/dist"/>    
    </target>

    <target name="jar" depends="compile">
    <mkdir dir="${dist.root}"/>
    <delete dir="${dist.root}/${project}-${version}.jar"/>
    <jar jarfile="${dist.root}/${project}-${version}.jar">
    <fileset dir="${build.dest}">
         <include name="org/tangtang/**"/>
         <exclude name="org/tangtang/test/**"/>        
    </fileset>
    </jar>
    </target>

    <target name="srcjar" depends="prepare">
    <delete dir="${dist.root}/${project}-${version}-src.jar"/>
    <jar jarfile="${dist.root}/${project}-${version}-src.jar">
    <fileset dir="${build.src}">
         <include name="org/tangtang/**"/>
         <include name="org/tangtang/test/**"/>
    </fileset>
    </jar>
    </target>

    <target name="tpl" depends="env">
    <jar jarfile="${dist.root}/${project}-${version}-tpl.jar">
    <fileset dir="${build.tpl}">
         <include name="tangtang/**"/>
    </fileset>
    </jar>
    </target>

    <target name="javadocs">
    <mkdir dir="${build.dir}/docs/api"/>
    <javadoc
    sourcepath="${build.src}"
    overview="${build.dir}/docs/overview.html"
    packagenames="org.tangtang.*"
    destdir="${build.dir}/docs/api"
    encoding="${build.encoding}"
    author="true"
    version="true"
    use="true"
    link="${javadoc.link}"
    windowtitle="${project} ${version} API"
    doctitle="${project} ${version} API"
    bottom="Copyright &copy; ${year} tangtang.org. All Rights Reserved."
    >
    <tag name="todo" description="To Do:"/>
    </javadoc>
    </target>

    <target name="poolman" depends="prepare">
    <jar jarfile="${dist.root}/poolman.jar">
    <fileset dir="${build.dest}">
         <include name="com/codestudio/**"/>
    </fileset>
    </jar>
    </target>

    <target name="nightly" depends="prepare">
        <tstamp/>     
        <jar jarfile="${dist.root}/nightly/${project}-${version}-${DSTAMP}-src.jar">
    <fileset dir="${build.src}">
         <include name="org/tangtang/**"/>
    </fileset>
    </jar>
    </target>

    <target name="compile" depends="prepare">
    <mkdir dir="${build.dest}"/>

    <!-- 检查依赖性 -->
    <depend srcdir="${build.src}"
    destdir="${build.dest}"
    cache="${build.dest}">
    <classpath refid="classpath"/>
    </depend>

    <javac srcdir="${build.src}"
    destdir="${build.dest}"
    debug="${debug}"
    deprecation="${deprecation}"
    optimize="${optimize}">
    <classpath refid="classpath"/>
    </javac>
    </target>

    <target name="clean">
    <delete>
    <fileset dir="${build.dest}">
    <include name="**/*.class"/>
    </fileset>
    </delete>
    </target>

    <target name="clean_dist">
    <delete>
    <fileset dir="${dist.root}" includes="*"/>
    </delete>
    <delete dir="${dist.dir}" quiet="false"/>
    </target>

    <target name="deploy" depends="jar">
    <mkdir dir="${dist.dir}/data"/>
    <mkdir dir="${dist.dir}/logs"/>

    <copy todir="${dist.dir}/bin">
    <fileset dir="${build.dir}/bin">
    <include name="*"/>
    </fileset>
    </copy>

        <fixcrlf srcdir="${dist.dir}/bin" eol="lf" eof="remove"
    includes="**/*"
    excludes="**/*.bat"
        />

    <copy todir="${dist.dir}/conf">
    <fileset dir="${build.dir}/conf">
    <include name="templates/*"/>
    <exclude name="*"/>
    <exclude name="**/*.bak"/>
    <exclude name="**/bak/**"/>
    </fileset>
    </copy>

    <copy todir="${dist.dir}/build">
    <fileset dir="${build.dir}/build">
    <include name="*"/>
    <include name="lib/*"/>
    <exclude name="**/*.bak"/>
    <exclude name="**/bak/**"/>
    </fileset>
    </copy>     

    <copy todir="${dist.dir}/templates">
    <fileset dir="${build.dir}/templates">
    <include name="**/*.vm"/>
    <exclude name="**/*.bak"/>
    <exclude name="**/bak/**"/>
    </fileset>
    </copy>

    <copy todir="${dist.dir}/webapps/html">
    <fileset dir="${build.dir}/webapps/html">
    <include name="**/*"/>
    <exclude name="**/*.bak"/>
    <exclude name="**/bak/**"/>
    </fileset>
    </copy>

    <copy todir="${dist.dir}/webapps/applet">
    <fileset dir="${build.dir}/webapps/applet">
    <include name="**/*"/>
    <exclude name="**/*.bak"/>
    <exclude name="**/bak/**"/>
    </fileset>
    </copy>

    <copy todir="${dist.dir}/webapps/icons">
    <fileset dir="${build.dir}/webapps/icons">
    <include name="**/*.gif"/>
    <include name="**/*.jpg"/>
    <exclude name="**/*.bak"/>
            <exclude name="**/bak/**"/>
    </fileset>
    </copy>

    <copy todir="${dist.dir}/webapps/images">
    <fileset dir="${build.dir}/webapps/images">
    <include name="**/*.gif"/>
    <include name="**/*.jpg"/>
    <exclude name="**/*.bak"/>
            <exclude name="**/bak/**"/>
    </fileset>
    </copy>

    <copy todir="${dist.dir}/webapps/WEB-INF/">
    <fileset dir="${build.dir}/webapps/WEB-INF/">
    <include name="**/*"/>
    <exclude name="classes/**"/>
    <exclude name="conf/*"/>
    <exclude name="src/**"/>
    </fileset>
    </copy>

    <jar jarfile="${dist.root}/${project}-${version}-war.jar">
    <fileset dir="${dist.dir}">
         <include name="**/*"/>
    </fileset>
    </jar>
    </target>

    <target name="conf">
    <delete>
    <fileset dir="${build.dir}/conf" includes="*"/>
    <fileset dir="${build.dir}/webapps/WEB-INF/conf" includes="*"/>
    </delete>
         <filter filtersfile="deploy.properties"/>
         <copy todir="${build.dir}/conf" filtering="true">
    <fileset dir="${build.dir}/conf/templates">
        <include name="*"/>
    </fileset>
         </copy>
         <copy todir="${build.dir}/webapps/WEB-INF/conf" filtering="true">
    <fileset dir="${build.dir}/webapps/WEB-INF/conf/templates">
        <include name="*"/>
    </fileset>
         </copy>
    </target>
    </project>
    转自:http://guiheji.blog.sohu.com/107658245.html
  • 相关阅读:
    053532
    053531
    053530
    053529
    053528
    RTSP和RTMP的区别是什么?
    RTSP、RTMP和HTTP协议的区别
    在C#中实现视频播放器
    wpf下基于opencv实现视频播放器
    C#实现视频播放器(Vlc.DotNet)
  • 原文地址:https://www.cnblogs.com/jancco/p/2488980.html
Copyright © 2020-2023  润新知