ANT 南京大学软件学院 2009 1.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第 2 章 Java 运行环境搭建 2.1 Java 的运行系统 2.1 Java 的运行系统 2.2 JDK 的安装与配置2.2 JDK 的安装与配置 2.3 Java 开发工具包 2.4 Java 源文件编辑环境的选择 2.5 Application 和 Applet 程序的编写与运行.
1 Java 语言程序设计 计算机系 鲍金玲. 2 引子 甲骨文 甲骨文是全球最大的信息管理软件及服务供应商,成立于 1977 年,公司总部 设在美国加利福尼亚州的红木城( Redwood Shores ),全球员工达 名, 包括 名开发人员、 7500 多名技术支持人员和.
Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
第一章 Java 程序设计技术 概述  什么是 Java 语言  一个简单的 Java 程序  程序的编译和运行  常见错误  使用 Java 核心 API 文档.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
Java 程序设计(第二版) 普通高等教育 “ 十一五 ” 国家级规划教材 辛运帷等 编著 徐小平 主讲.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
自衛消防編組任務職責 講 義 This template can be used as a starter file for presenting training materials in a group setting. Sections Right-click on a slide to add.
Subversion (SVN) Presented by 李明璋 R /2/21
第 13 章 套件 (Packages).
第1章 java简介及环境搭建 第1章 Java简介及开发环境搭建.
System Administration Practice Homework 2: Shell Programming
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
APP課程:Android程式設計開發環境與工具介紹
CH3 Eclipse.
第四章 網頁表單與資料傳遞.
Qtopia 编程部分要点分析 苗忠良.
软件设计模式与体系结构课程设计 周 宇 College of Information Science and Technology
第17章 使用B4J建立跨平台應用程式 17-1 認識B4J整合開發環境 17-2 下載與安裝B4J開發環境
台灣大學計算機及資訊網路中心 教學研究組 張傑生
第六章 应用程序结构.
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
OpenFoundry.org 版本控制系統服務 使用教學
ANDROID與OSGI平台整合.
Proteus 可视化设计 Drag, Drop and PLAY! Slide 1.
Android開發環境建置與設定 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
Basis基本操作、使用者 管理與權限設定
陈炎 南京大学软件学院 Ant简介 Ant一个优秀的构建工具 Ant意思是Another Neat Tool 陈炎 南京大学软件学院
第五讲 数据的分组、合并与转换.
簡易 Visual Studio 2010 C++ 使用手冊
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
中国散裂中子源小角谱仪 的实验数据格式与处理算法 报告人:张晟恺 中国科学院高能物理研究所 SCE 年8月18日
EndNote X6 Advance your Research and Publish Instantly
第4章 PIC软件开发设计基础.
第一章 電腦、程式與JAVA.
创建型设计模式.
Android開發環境建置與設定 建國科技大學 資管系 饒瑞佶 2010/10.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
2018/12/7 Java语言程序设计 教师:段鹏飞.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
Android盤點系統 組別:第九組 組員:四資工三B 4980E046 宋佩鴻 四資工三B 4980E054 詹典易
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
臺北市立大學 資訊科學系(含碩士班) 賴阿福 CS TEAM
校園網路架構介紹與資源利用 主講人:趙志宏 圖書資訊館網路通訊組.
簡易 Visual Studio 2005 C++ 使用手冊
建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2 2013/2 V3 2014/9 V4
認識 Java.
Microsoft SQL Server 2008 報表服務_設計
資料結構 Data Structures Fall 2006, 95學年第一學期 Instructor : 陳宗正.
EndNote X6 進階 Advance your Research and Publish Instantly
如何有效率的學習Linux 培養組合能力 多用程式, 少寫程式 從錯誤訊息中學習 養成略讀 “各種文件” 加強英文基本閱讀能力 勤作筆記
Guide to a successful PowerPoint design – simple is best
中国科学技术大学计算机系 陈香兰 2013Fall 第七讲 存储器管理 中国科学技术大学计算机系 陈香兰 2013Fall.
虚 拟 仪 器 virtual instrument
課程網站
Location Based Services - LBS
第十二章 学习使用Ant Apache Ant是一个基于Java的构建工具,它可以 会构建多种项目,但是目前主要被用于Java项目 的构建, Ant是用Java语言编写,可以在多个操 作系统中运行,目前在绝大部分的Java开源项目 中,都选择使用Ant作为构建项目的工具,Ant已 经成为Java开源项目构建的事实标准,而且越来.
Interfaces and Packages
Compute System Administration Homework 2: Shell Script
Create and Use the Authorization Objects in ABAP
Advanced Basic Key Terms Dependency Generalization Actor Stereotype
怎樣把同一評估 給與在不同班級的學生 How to administer the Same assessment to students from Different classes and groups.
code::blocks 與GLUT 程式開發
MGT 213 System Management Server的昨天,今天和明天
Usage Eclipse 敏捷方法工具介紹 實驗室網站:
OrientX暑期工作总结及计划 XML Group
Section 1 Basic concepts of web page
When using opening and closing presentation slides, use the masterbrand logo at the correct size and in the right position. This slide meets both needs.
Presentation transcript:

ANT 南京大学软件学院 2009 1

The Who, What, When and Where James Duncan Davidson Open source, BSD style license application providing build functions for Java programs Available since mid 2000 http://ant.apache.org/ 1998年,有一位程序员改变了整个Java世界。James Duncan Davidson在试图使用当时的构建工具(GNU Make、批处理文件和shell脚本)来创建一个跨平台的Tomcat构建时,做了多种努力均不能成功。因此,他在从欧洲飞回美国的途中设计出了自己的构建实用工具,并为之命名为Ant,因为这是一个小东西,但却能做大事。James为了解决自己的问题(即创建一个跨平台的构建)而提出的这种快速而简单的解决方案已经演变成Java环境中应用最为广泛的构建管理工具。

Why Ant? More popular than 'make' for building Java projects It runs on any platform that the Java projects it builds are on Updated and improved regularly Straightforward XML syntax Plug-in oriented architecture encourages expansion Directly supported by some IDEs (with more coming) Free and open source Fast, fast, and fast

Getting Ant Binary Distributions Source Distributions Bundled in IDEs http://ant.apache.org/bindownload.cgi Source Distributions http://ant.apache.org/srcdownload.cgi Bundled in IDEs All the main Java IDEs ship with Ant, products such as Eclipse, NetBeans

System Requirements For the current version of Ant, you will also need a JDK installed on your system, version 1.2 or later required, 1.5 or later strongly recommended. The later the version of Java , the more Ant tasks you get.

Installing Ant The binary distribution of Ant consists of the following directory layout: ant +--- README, LICENSE, fetch.xml, other text files. +--- bin // contains launcher scripts | +--- lib // contains Ant jars plus necessary dependencies +--- docs // contains documentation | | | +--- images // various logos for html documentation | +--- manual // Ant documentation +--- etc // contains xsl goodies XSL(eXtensible Stylesheet Language),即可扩展样式表语言

Installing Ant Windows and OS/2 Assume Ant is installed in c:\ant\. The following sets up the environment: set ANT_HOME=c:\ant set JAVA_HOME=c:\jdk-1.5.0.05 set PATH=%PATH%;%ANT_HOME%\bin

Installing Ant Linux/Unix (bash) Assume Ant is installed in /usr/local/ant. The following sets up the environment: export ANT_HOME=/usr/local/ant export JAVA_HOME=/usr/local/jdk-1.5.0.05 export PATH=${PATH}:${ANT_HOME}/bin

Using Ant 运行ant 查阅antdoc 命令行模式下到buildfile所在目录 ant [-buildfile/-f] [文件名] [目标] 默认文件为build.xml 如果需要指定buildfile,则加入-buildfile或-f参数 查阅antdoc ant使用帮助:安装目录\docs\index.html ant任务介绍 ant 使用当前目录下的build.xml运行Ant,执行缺省的target。 ant -buildfile file 使用当前目录下的file(test.xml)运行Ant,执行缺省的target。 ant -buildfile file dist 使用当前目录下的file(test.xml)运行Ant,执行一个叫做dist的target。

Command Line Options ant [options] [target [target2 [target3] ...]] Options: -help print this message -version print the version information and exit -quiet be extra quiet -verbose be extra verbose -debug print debugging information -emacs produce logging information without adornments -logfile file use given file for log output -logger classname the class that is to perform logging -listener classname add an instance of class as a project listener -buildfile file use specified buildfile -find file search for buildfile towards the root of thefilesystem and use the first one found -Dproperty=value set property to value -projecthelp print project help information

Structure of Buildfile

Buildfile文件 以XML文件来描述的 每个构建文件包含一个工程(project) 每个工程包含若干个目标(target) 目标可以依赖于其他的目标(depends) 目标包含任务(task)

A simple example project:每个构建文件以project为根节点 name=“myproject” 为工程命名 <?xml version="1.0"?> <project name=“myproject" default=“test“ basedir="." > <target name=“test" description=“ test ant."> <javac srcdir=“.”/> <echo message=“Ant is working properly”/> </target> </project> project:每个构建文件以project为根节点 name=“myproject” 为工程命名 default=“test”:默认执行test目标

A simple example(2) JAVAC:用于编译JAVA源码 ECHO:当构建抵达这里时,它将显示该文本内容 <?xml version="1.0"?> <project name=“myproject" default=“test" basedir="." > <target name=“test" description=“ test ant."> <javac srcdir=“.”/> <echo message=“Ant is working properly”/> </target> </project> JAVAC:用于编译JAVA源码 ECHO:当构建抵达这里时,它将显示该文本内容

Project default:表示默认的运行目标,即指定默认的target。这个属性是必须的 basedir:the base directory from which all path calculations are done. This attribute might be overridden by setting the "basedir" property beforehand. If neither the attribute nor the property have been set, the parent directory of the buildfile will be used name:表示项目名 <project name=“first" default="init“ basedir=“.”>

Target Represent the fundamental tasks you want the build file to perform. name表示目标名字,这个属性是必须的 depends表示依赖的目标,多个目标用逗号分隔 if表示仅当属性设置时才执行 unless表示当属性没有设置时才执行 description表示对这个目标的描述

Depends 指定了target的执行顺序,被依赖的target先执行 例: <target name=“run” depends=“compile”/> <target name=“compile” depends=“prepare”/> <target name=“prepare”> 执行顺序:preparecompilerun <target name=“run” depends=“compile,prepare”/> 每个target只执行一次!

If & unless If:只有此条件成立时才执行 Unless:只有此条件不成立时才执行 <target name="build-module-A" if="module-A-present"/> Unless:只有此条件不成立时才执行 <target name="build-module-A" unless="module-A-present"/> Note: Ant will only check whether the property has been set, the value doesn't matter. A property set to the empty string is still an existing property

Property 每个property可以有一个名字和一个值 property可用于task的属性值。这是通过将属性名放在 "${" 和 "} " 之间并放在属性值的位置来实现的 例: <property name="builddir" value="build"/> 一个task引用时,语法为${builddir},将被解析为build

Property (2) Pulls all the properties from a file. The format of the file is the traditional "name=value" style that Java properties files have always used <property file="build.properties"/> Demonstrates that properties can also be pulled from system environment variables on certain operating systems (not necessarily all though) <property environment="env"/> <echo message="ANT_HOME is set to = ${env.ANT_HOME}"/>

Task 一个task是一段可执行的代码 一个task可以有多个属性(变量)。属性只可能包含对property的引用。这些引用会在task执行前被解析 下面是Task的一般构造形式 <name attribute1="value1" attribute2="value2" ... />

Task 核心任务。核心任务是Ant自带的任务 可选任务。可选任务实来自第三方的任务,因此需要一个附加的JAR文件 用户自定义的任务。用户自定义的任务实用户自己开发的任务 一个可选task一般需要额外的库才能工作。这些外部库可以放到Ant的lib目录下,这样Ant就能自动装入,或者将其放入环境变量中

Core tasks ..ant\docs\manual\CoreTasks

常用的task File(Directory)相关 Java相关 Others mkdir move copy delete javac jar Others

File(Directory)相关 mkdir 创建一个目录,如果他的父目录不存在,也会被同时创建 它只有一个属性dir,而且是必须的 例子: <mkdir dir=“${builddir}/classes"/> 说明:如果 ${builddir} 不存在,也会被同时创建

File(Directory)相关 move 用于文件或文件集的移动,其属性如下 file 表示源文件。也可以用嵌套的<fileset> tofile 表示目标文件 todir 表示目标目录 overwrite 表示指定是否覆盖目标文件,默认值是覆盖 includeEmptyDirs 表示制定是否拷贝空目录,默认值为yes failonerror 表示指定如目标没有发现是否自动停止,默认值是停止 verbose 表示制定是否显示详细信息,默认值不显示 一个简单的fileset通常有三个属性:dir,includes,excludes

Example Move a single file (rename a file) <move file="file.orig" tofile="file.moved"/> Move a single file to a directory <move file="file.orig" todir="dir/to/move/to"/> Move a directory to a new directory <move todir="new/dir/to/move/to"> <fileset dir="src/dir"/> </move> or, since Ant 1.6.3: <move file="src/dir" tofile="new/dir/to/move/to"/> Move a set of files to a new directory <move todir="some/new/dir"> <fileset dir="my/src/dir"> <include name="**/*.jar"/> <exclude name="**/ant.jar"/> </fileset>

File(Directory)相关 copy 用于文件或文件集的拷贝,其属性如下 file 表示源文件。也可以用嵌套的<fileset> tofile 表示目标文件 todir 表示目标目录 overwrite 表示指定是否覆盖目标文件,默认值是不覆盖 includeEmptyDirs 表示制定是否拷贝空目录,默认值为拷贝 failonerror 表示指定如目标没有发现是否自动停止,默认值是停止 verbose 表示制定是否显示详细信息,默认值不显示

Example Copy a single file Copy a single file to a directory <copy file="myfile.txt" tofile="mycopy.txt"/> Copy a single file to a directory <copy file="myfile.txt" todir="../some/other/dir"/> Copy a directory to another directory <copy todir="../new/dir"> <fileset dir="src_dir"/> </copy> Copy all the files from one directory to another, skipping any java source files <copy todir="../dest/dir" > <fileset dir="src_dir"> <exclude name="**/*.java"/> </fileset> </copy> Or <copy todir="../dest/dir"> <fileset dir="src_dir" excludes="**/*.java"/>

File(Directory)相关 delete 用于删除一个文件或一组文件,属性如下 file 表示要删除的文件 dir 表示要删除的目录 includeEmptyDirs 表示指定是否要删除空目录,默认值是删除 failonerror 表示指定当碰到错误是否停止,默认值是自动停止 verbose 表示指定是否列出所删除的文件,默认值为不列出

Example 删除一个文件 删除指定目录及其子目录 删除指定的一组文件 <delete file="/lib/ant.jar"/> 删除指定目录及其子目录 <delete dir="lib"/> 删除指定的一组文件 <delete> <fileset dir="." includes="**/*.bak"/> </delete>

Javac Javac 用于编译一个或一组java文件,属性如下 srcdir 表示源程序的目录。 destdir 表示class文件的输出目录 includes 表示被编译的文件的模式 excludes 表示被排除的文件的模式 classpath 表示所使用的类路径 debug 表示包含的调试信息 optimize 表示是否使用优化 verbose 表示提供详细的输出信息 fileonerror 表示当碰到错误就自动停止

Examples 例1 <javac srcdir=“${src} " destdir=“${build} " classpath="xyz.jar" debug="on"/> 编译{src}目录及其子目录下的所有Java文件,.Class文件将放在${build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息

Examples 例2 <javac srcdir=“${src}:${src2}“ destdir=”${build}" includes="mypackage/p1/**" excludes="mypackage/p1/testpackage/**" classpath="xyz.jar debug="on"/> 编译${src}和${src2}目录及其子目录下的所有Java文件, Class文件将放在${build}指定的目录下。其中mypackage/p1/**将被编译,而mypackage/p1/testpackage/**将不会被编译

Java java 用来执行编译生成的.class文件,其属性如下 classname 表示将执行的类名 jar 表示包含该类的JAR文件名 classpath 所表示用到的类路径 fork 表示在一个新的虚拟机中运行该类 failonerror 表示当出现错误时自动停止 output 表示输出文件 append 表示追加或者覆盖默认文件 执行的参数用嵌套的<arg>

Example Invokes a class named test.Main from within test.jar. Passes the argument -h to test.Main <java classname="test.Main"> <arg value="-h"/> <classpath> <pathelement location="\test.jar"/> <pathelement path="${java.class.path}"/> </classpath> </java>

Jar jar 用来生成一个JAR文件,属性如下 例: destfile 表示JAR文件名 basedir 表示被归档的文件名 includes 表示被归档的文件模式 excludes 表示被排除的文件模式 例: <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes" includes="mypackage/test/**" excludes="**/Test.class"/>

A Complete Example <project name="MyProject" default="dist" basedir="."> <!-- set global properties for this build --> <property name="src" value="."/> <property name="build" value="build"/> <property name="dist" value="dist"/>     <target name="init"> <!-- Create the build directory structure used by compile --> <mkdir dir="${build}"/> </target>

A Complete Example(contd. ) <target name="compile" depends="init"> <!-- Compile the java code from ${src} into ${build} --> <javac srcdir="${src}" destdir="${build}"/> </target> <target name="dist" depends="compile"> <!-- Create the distribution directory --> <mkdir dir="${dist}/lib"/> <!-- Put things in ${build} into MyProject-${DSTAMP}.jar --> <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/> </target> <target name="clean"> <!-- Delete the ${build} and ${dist} directory trees --> <delete dir="${build}"/> <delete dir="${dist}"/> </target> </project>

Others zip 文件的 Ant 任务 创建 tar 文件 解压缩和提取文件 <zip destfile="output.zip" basedir="output"/> 创建 tar 文件 <gzip src="output.tar" zipfile="output.tar.gz"/> 解压缩和提取文件 <unzip src="output.tar.gz" dest="extractDir"/>

时间戳生成 tstamp任务一般在init目标中调用 在调用 tstamp 任务之后,能够根据日期命名该 JAR 文件,如下所示 <jar destfile="package-${DSTAMP}.jar" basedir="classes"/> 如果这个任务在 2009年 4月 1 日调用,该 JAR 文件将被命名为package-20090401.jar

制作java文档——javadoc任务 Generates code documentation using the javadoc tool 示例 <target name="javadoc" description="Generates javadoc."> <javadoc destdir="${dir.doc}"> <fileset dir="${dir.src}"> <include name="**/*.java"/> <exclude name=“**/*Test.java”/> </fileset> </javadoc> </target>

DataType DataType可以很自然的处理构建过程中的文件和路径问题 常见的DataType DirSet 类型、 FileList类型、 FileSet类型、 FilterSet 类型、 Regexp类型

使用ant实例 Eclipse中集成Ant实现快速开发

创建Eclipse工程 File→New→Project,打开“New Project“对话框,选择Java Project项目并点击Next 输入工程名AntExample,并点击Finish

添加Java代码 选择AntExample工程并且选择“File→New→Class”以打开“New Java Class”对话框 然后,填写包名为cn.nju,新类的名字为AntClass 添加代码 public static void main(String args[]){ System.out.println(“Hello world!"); }

在Eclipse中编写Ant Build文件 AntExample工程并且选择“New→File”。在“File Name”框中,输入build.xml,并且点击Finish 只要文件后缀是.xml的,Eclipse就把认为是可能的Ant buildfile

编辑 Ant build文件 <?xml version="1.0"?> <project name="AntExample" default="all"> <description> test </description> <target name="all" depends="compile,compress" description="compile and compress"> <echo>Building the .jar file.</echo> </target> <target name="compile"> <javac srcdir="src/cn/nju" /> <target name="compress"> <jar jarfile="Project.jar" basedir="src/cn/nju" includes="*.class" /> </project>

运行ant的buildfile文件 方式一:在build.xml右键菜单上选择Run As > Ant Build 会弹出对话框来设置运行的参数

执行结果

执行后生成文件

Eclipse中使用ant 参见Eclipse帮助文档

Further Readings antdocs:没什么比它更权威 《Ant极限编程》 《使用Ant进行JAVA开发》 【作者】 孟浩文 【出版社】 清华大学出版社 《使用Ant进行JAVA开发》 【原书名】 Java Development With Ant 【作者】 Erik Hatcher,Steve Loughran 【译者】 刘永丹 【出版社】 电子工业出版社

Maven Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. http://maven.apache.org/