`
topzhujia
  • 浏览: 54270 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Ant生成一个简单的Java项目

阅读更多

编译源代码

由于 Ant 的主要目标是生成 Java 应用程序,它能够内在地、出色地支持调用 javac 编译器以及其他 Java 相关任务就毫不奇怪了。下面是编译 Java 代码的任务的编写方式:

<javac srcdir="src"/>

这个标签寻找 src 目录中以 .java 为扩展名的所有文件,并对它们调用 javac 编译器,从而在相同的目录中生成类文件。当然,将类文件放在一个单独的目录结构中通常会更清晰;可以通过添加distdir 属性来让 Ant 做到这点。其他有用的属性包括:

· classpath:等价于 javac -classpath 选项。

· debug="true":指示编译器应该带调试信息编译源文件。

javac 任务的一个重要特点在于,它仅编译那些它认为需要编译的源文件。如果某个类文件已经存在,并且对应的源文件自从该类文件生成以来还没有改变过,那么该源文件就不会被重新编译。javac任务的输出显示了实际被编译的源文件的数目。编写一个 clean 目标来从目标目录移除生成的任何类文件是个很好的习惯。如果想要确保所有源文件都已编译,就可以使用这个任务。这种行为刻画了 Ant 的许多任务的特点:如果某个任务能够确定所请求的操作不需要执行,那么该操作就会被跳过。

Ant 一样,javac 编译器本身也是用 Java 语言实现的。这对 Ant 中的 javac 任务的使用来说非常有利,因为它通常调用 Ant 运行所在的相同 Java 虚拟机(JVM)中的编译器类。在每次需要编译 Java 代码时,其他生成工具通常需要运行一个新的 javac 进程,从而需要一个新的 JVM 实例。但是在使用 Ant 的情况下,只需要单个 JVM 实例,它既用于运行 Ant 本身,也用于执行所有必需的编译任务(以及其他相关任务,比如处理 JAR 文件)。这是一种高效得多的资源使用方式,能够极大地缩短项目生成时间。

编译器选项

正如我们从前一小节看到的,Ant javac 任务的默认行为是调用运行 Ant 本身的任何 JVM 的标准编译器。然而,有时您可能想要单独地调用编译器 —— 例如当你希望指定编译器的某些内存选项,或者需要使用一同级别编译器时候。为实现这个目的,需将 javac fork 属性

置为 true,比如像下面这样:

<javac srcdir="src" fork="true"/>

如果想要指定一个不同的 javac 可执行文件,并向它传递一个最大内存设置,您可以像下面这样做:

<javac srcdir="src" fork="true" executable="/home/zhujia/jdk1.6.0_21/bin/javac"

memoryMaximumSize="128m"/>

甚至可以将 Ant 配置为使用某种不同的编译器。受支持的编译器包括开放源代码的 Jikes 编译器和来自 GNU 编译器集(GNU Compiler CollectionGCC)的 GCI 编译器。(请参阅参考资料以了解关于这两种编译器的更多信息。)可以通过两种方式指定这些编译器:可以设置 build.compiler属性,这将应用于使用 javac 任务的所有场合;或根据需要设置每个javac 任务中的 compiler 属性。

javac 任务还支持其他许多选项。请参考 Ant 手册以了解更多细节(请参阅参考资料)。

创建 JAR 文件

在编译 Java 源文件之后,结果类文件通常被打包到一个 JAR 文件中,这个文件类似 zip 归档文件。每个 JAR 文件都包含一个清单文件,它可以指定该 JAR 文件的属性。

下面是 Ant jar 任务的一个简单使用例子:

<jar distfile="package.jar" basedir="classes"/>

这将创建一个名为 package.jar JAR 文件,并把 classes 目录中的所有文件添加到其中(JAR文件能够包含任意类型的文件,而不只是类文件)。此处没有指定清单文件,因此 Ant 将提供一个基本的清单文件。

manifest 属性允许指定一个用作该 JAR 文件的清单的文件。清单文件的内容还可以使用 manifest任务在生成文件中指定。这个任务能够像文件系统写入一个清单文件,或者能够实际嵌套在 jar 之内,以便一次性地创建清单文件和 JAR 文件。例如:

<jar distfile="package.jar" basedir="classes">

<manifest>

<attribute name="Built-By" value="${user.name}"/>

<attribute name="Main-class" value="package.Main"/>

</manifest>

</jar>

时间戳生成

在生成环境中使用当前时间和日期,以某种方式标记某个生成任务的输出,以便记录它是何时生成的,这经常是可取的。这可能涉及编辑一个文件,以便插入一个字符串来指定日期和时间,或将这个信息合并到 JAR zip 文件的文件名中。

这种需要是通过简单但是非常有用的 tstamp 任务来解决的。这个任务通常在某次生成过程开始时调用,比如在一个 init 目标中。这个任务不需要属性,许多情况下只需 <tstamp/> 就足够了。tstamp 不产生任何输出;相反,它根据当前系统时间和日期设置 Ant 属性。下面是 tstamp 设置的一些属性、对每个属性的说明,以及这些属性可被设置到的值的例子:

属性

说明

例子

DSTAMP

设置为当前日期,默认格式为yyyymmdd

20031217

TSTAMP

设置为当前时间,默认格式为 hhmm

1603

TODAY

设置为当前日期,带完整的月份

2003 12 17

例如,在前一小节中,我们按如下方式创建了一个 JAR 文件:

<jar distfile="package.jar" basedir="classes"/>

在调用 tstamp 任务之后,我们能够根据日期命名该 JAR 文件,如下所示:

<jar distfile="package-${DSTAMP}.jar" basedir="classes"/>

因此,如果这个任务在 2003 12 17 日调用,该 JAR 文件将被命名为

package-20031217.jar

还可以配tstamp 任务置不的属性,用一个间之前或之间偏移,或的方式格式化该字符串。所有这些都是使用一个嵌套的 format 元素来完成的,如下所示:

<tstamp>

<format property="OFFSET_TIME"

pattern="HH:mm:ss"

offset="10" unit="minute"/>

</tstamp>

上面的清单将 OFFSET_TIME 属性设置为距离当前时间 10 分钟之后的小时数、分钟数和秒数。

用于定义格式字符串的字符与 java.text.SimpleDateFormat 类所定义的那些格式字符相同。

综合

下面是一个build.xml文件实例,它将编译 src 目录下的所有源代码,将结果类文件放在 build 目录下,然后把所有类文件打包到 dist 目录中的一个 JAR 文件中。要自己试验这个生成文件,您所需要的就是包含一个或多个 Java 源代码文件的 src 目录 —— 这个目录可以包含从简单的“Hell World”程序到来自某个现有项目的大量源文件的任何内容。如果需要向 Java classpath 添加 JAR 文件或其他任何内容,以便成功地编译源代码,您只需在 javac 任务中为其添加一个 classpath 属性。

该生成文件看起来如下:

<?xml version="1.0"?>

<project default="dist" name="Project Argon">

<description>A simple Java project</description>

<property name="srcDir" location="src"/>

<property name="buildDir" location="build"/>

<property name="distDir" location="dist"/>

<target name="init">

<tstamp/>

<mkdir dir="${buildDir}"/>

<mkdir dir="${distDir}"/>

</target>

<target name="compile" depends="init">

<javac srcdir="${srcDir}" distdir="${buildDir}"/>

</target>

<target name="dist" depends="compile">

<jar distfile="${distDir}/package-${DSTAMP}.jar" basedir="${buildDir}">

<manifest>

<attribute name="Built-By" value="${user.name}"/>

<attribute name="Main-Class" value="package.Main"/>

</manifest>

</jar>

<jar distfile="${distDir}/package-src-${DSTAMP}.jar" basedir="${srcDir}"/>

</target>

<target name="clean">

<delete dir="${buildDir}"/>

<delete dir="${distDir}"/>

</target>

</project>

下面是使用该文件执行的某次生成过程的示例输出(您得到的输出可能不一样,具体取决于 src 目录的内容):

Buildfile: build.xml

init:

[echo] ant version: Apache Ant version 1.7.1 compiled on September 8 2010

[mkdir] Created dir: /home/zhujia/Developer/workspace/I18N_ANT/bin

[mkdir] Created dir: /home/zhujia/Developer/workspace/I18N_ANT/dist

build:

[javac] Compiling 1 source file to /home/zhujia/Developer/workspace/I18N_ANT/bin

dist:

[jar] Building jar: /home/zhujia/Developer/workspace/I18N_ANT/dist/I18N-20101005.jar

[jar] Building jar: /home/zhujia/Developer/workspace/I18N_ANT/dist/I18N-src-20101005.jar

BUILD SUCCESSFUL

Total time: 1 second

注意 JAR 文件是根据当日期命名的,并用程主类设置了一个清单目,以便主类能够通过一个简单的命令 java -jar package-20031217.jar 来直接运行。我们还创建了一个 JAR 文件,它仅包含项目的源代码。

分享到:
评论

相关推荐

    Ant 项目生成工具

    在本教程中,您将学习 Ant 这个...我们将逐步完成为一个简单 Java 项目编 写生成文件的步骤,然后考察 Ant 的其他一些有用功能,包括文件系统操作和模式匹配。最后编写 一个扩展 Ant 功能的自己的Java 类来结束本教程。

    java代码生成器/ant一键生成

    通过freemark模板制定模板文件,支持ant一键生成,内置详细的doc说明文档 内置完整的jar包。无需编译 一键生成。可结合自己的需求进行改动和调整。灵活、通用 可以完美的集成在各个项目中,下载记得好评。 有使用上...

    JAVA_Ant详细介绍与应用

    Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。 一.安装与配置 二.Ant的关键元素 三.Ant的...

    如何使用ANT开发Java程序

    3、一个 ant 项目目录结构: c:\HelloWorld :项目主目录 \src :源程序目录 \classes :编译后的 class 文件目录 \lib :开发项目所需要的类库目录,比如开发数据库时所需要的 jdbc lib \jar :打包好的 jar ...

    ant使用指南.pdf

    在本教程中,您将学习 Ant 这...我们将逐步完成为一个简单 Java 项目编 写生成文件的步骤,然后考察 Ant 的其他一些有用功能,包括文件系统操作和模式匹配。最后编写 一个扩展 Ant 功能的自己的 Java 类来结束本教程。

    使用Ant进行java开发

    在本教程中,您将学习 Ant 这个 Java TM 项目生成工具。由于其灵活性和易用性,Ant 很快在 Java开发人员中流行开来,因此您有必要了解关于它的更多信息。

    Apache Ant入门教程

    Apache Ant 是一个基于 Java 的生成工具。据最初的创始人 James Duncan Davidson 介绍,这个工具的名称是 another neat tool(另一个整洁的工具) 的首字母缩写。 生成工具在软件开发中用来将源代码和其他输入文件...

    使用ant编译生成flex的swc文件

    直接使用flex的sdk生成swc文件,很繁琐,而且对于大项目来说,是个头痛的事情。ant在对java打包生成jar时,它优良的设计显露无疑,这里我们使用它,来生成swc,完成项目编译打包。

    Ant项目工具使用指南 pdf

    Ant是JAVA开发中的一个很常用字的项目生成工具,ANT使用指南会帮你彻底了解她,并教会你如何用她来生成项目。Ant 最初是 Tomcat 的一个内部组件,Tomcat 是 Java Servlet 和 JavaServer Pages (JSP) 参考  实现中...

    Ant使用指南-Ant入门手册

    Ant是什么、Ant入门、Ant入门书籍、Ant入门手册、Ant资料、Ant文档、Ant使用指南 包括以下章节: ...生成一个简单的JAVA项目 文件系统操作 其它有用的任务和技术 使用自定义任务来扩展Ant 结束语和参考资料

    Ant使用指南pdf

    全面的ant使用手册~!内容如下: · Ant 生成文件是如何构造的 ...· 模式匹配和选择器的基本概念,再加上如何从一个生成文件调用另一个生成文件,以及如何 执行 CVS 操作 · 如何通过编写 Java 类来扩展Ant 的标准功能

    ant的基本配置说明

    Ant 是著名Java开源组织Apache的一个项目,是一个基于java的build工具。它可以使你通过ant脚本语言,自动你的项目拷贝到某个目录,发布项目,或者生成一些代码,执行SQL语言。总之它可以帮助你完成项目开发中除了...

    Maven最新版是一个流行的Java项目构建系统 目前,绝大多数开发人员都把Ant当作Java编程项目的标准构建工具.rar

    Maven是一种Java项目管理工具,可以管理项目构建、依赖关系和文档。Maven使用基于XML的配置文件,称为pom.xml,来定义项目的结构和构建过程。 Maven的优点 易于使用这一特点使得Maven在软件开发中变得更加便捷。...

    Java项目开发与毕业设计指导

    Ch10:一个简单的编译器实现 安装JDK、配置环境变量,启动Eclipse并导入ch10项目,运行主类calculator.Calculator即可。 Ch11:基于RMI分布计算实例 安装JDK、配置环境变量,编译java源文件(可以用eclipse自动...

    apache-ant-1.9.3-src.tar

    在Java 中应用是平台无关性的,当然不会用平台相关的make脚本来完成这些批处理任务了,ANT本身就是这样一个流程脚本引擎,用于自动化调用程序完成项目的编译,打包,测试等。除了基于JAVA是平台无关的外,脚本的格式...

    Ant使用指南

    我们将逐步完成为一个简单 Java 项目编 写生成文件的步骤,然后考察 Ant 的其他一些有用功能,包括文件系统操作和模式匹配。最后编写 一个扩展 Ant 功能的自己的 Java 类来结束本教程。 在学习本教程的...

    Vue2版前端源码,基于 Vue2+AntDesignVue 实现的 Ant Design Pro提供强大代码生成器的低代码平台

    JeecgBoot—Vue2版前端源码,基于 Vue2+AntDesignVue 实现的 Ant Design Pro,提供强大代码生成器的低代码平台。 前端页面代码和后端功能代码一键生成,不需要写任何代码,保持jeecg一贯的强大

    Ant 的 (批处理)Bat 实现

    ANT 是一个Java TM 项目生成工具 本批处理程序模仿其功能 可以生成Java 工程 可编译Java程序 可运行Tomcat 本程序小巧,移植性好,易扩展 大家可以一起修改,改善其功能

    processing-java:带有 ant 构建文件的纯 Java 处理草图

    纯 Java 处理 没有 PDE,没有 IDE,没有戏剧性。 喜欢但想要编写更多地道的 Java 程序? 讨厌Eclipse?... 这是最终将由一个简单的项目生成器管理的临时占位符。 :copyright: 2014 Yong Joseph Bakos。

    Java通用代码生成实用程序XDoclet(源码包)

    XDoclet 是一个通用的代码生成实用程序,是一个扩展的Javadoc Doclet引擎,它允许您使用象 JavaDoc 标记之 类的东西来向诸如类、方法和字段之类的语言特征添加元数据。随后,它利用这些额外的元数据来生成诸如部署...

Global site tag (gtag.js) - Google Analytics