- 浏览: 134693 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
爱吃小面:
jquery中altow应该改为altrow
Jquery 实现隔行变色 -
lsyx5566:
...
php获取表单数据 -
shaka:
你们这些从业人员怎么写东西都这么不负责任,
验证url的
ww ...
JS 验证时间/url地址/电子邮件 -
java小细胞:
请问一下url除了规定协议还有什么规则?
js验证URL -
hesihua:
恩 写的非常好噢~~
Jquery 实现隔行变色
一. ant build.xml解释:
1.项目工程:
<project name="simple Buildfile" default="compile" basedir="."> </project>
<project>有3个属性:
name ->为工程提供一个名字。
default ->构建文件中的一个目标,在运行ant是如果不指定目标, ant就默认运行default中的目标。
basedir ->定义工程的根目录。一般为“.” ,也是当前构建文件所在目录,不论运行ant 是在哪个目录下。
2. 目标(target):
目标包括做具体工作的任务,将完成最终的目标。
以下目标将编译一组文件,并将它们打包到一个名为finallib.jar的文件中。
<target name="build-lib"> <javac srcdir="${src.ejb.dir}:${src.java.dir}" destdir="${build.dir}" debug="on" deprecation="on" includes="**/*.java" excludes="${global.exclude}"> <classpath> <pathelement location="."/> <pathelement location="${lib.dir}/somelib.jar"/> </classpath> </javac> <jar jarfile="${dist}/lib/finallib.jar" basedir="${build.dir}"/> </target>
3. 任务:
任务是构建文件中最小的构建块,包括编译源代码,对类打包,由CVS获取修订情况或者是复制文件和目录
<copy todir="${weblogic.dir}/${weblogic.server.home}/public_html/jsp"> <fileset dir="${src.www.dir}/jsp"/> </copy>
注:对于copy任务,不能因为它嵌套<fileset>元素而认为它是copy对象的子类。
4. 数据元素:
数据元素分两类: 特性和DataType.
1). 特性(property)
在构建文件中由<property>标签表示的名-值对。
<property name="property.one" value="one" /> <property name="property.two" value="${property.one}:two" />
特性的一个好处就是其值是类型不可知的,如:一个特性表示目录,此特性并不知道其值是一个目录,也不关心此目录是否存在。但是又时希望对定义路径有更多的控制,对此就可以使用DataType.
2). DataType
一类表示复杂数据集合的元素,例如fileset和path等。
使用特性表示的路径:
<property name="classpath" value="${lib.dir}/j2ee.jar:${lib.dir}/activation.jar:${lib.dir}/servlet.jar:${lib.dir}/jasper.jar:${lib.dir}/crimson.jar:${lib.dir}/jaxp.jar"/>
改为使用fileset DataType 表示:
<path id="classpath"> <fileset dir="${lib.dir}"> <include name="j2ee.jar"/> <include name="activation.jar"/> <include name="servlet.jar"/> .................. </fileset> </path>
可使用通配符来表示:
<path id="classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </path>
数据元素(data element)
涵盖了特性和DataType
二. 一个实例工程及构建文件:
1. 工程目录结构图
irsslbo1-1.0.4
/bin(可选的) //存放应用脚本(无论是安装还是执行脚本) windows-->bot.bat;unix-->bot.sh
/build(临时的) //存放编译后的类文件
/lib
/bin
/doc
/irssibot(顶级包)
/src //源代码
/doc //存放非javaDoc文档,终端用户文档及库的文档
/dist(临时的) //发布最终产品的位置,非归档的内包,jar,war,EAR和TAR
/lib //存放jar
/bin //
/doc
/config
/lib //存放工程所用到的jar等库文件
2. 设计和编写实例构建文件
(1). 构建文件如何开始?
构建文件由一个工程描述文件(project descriptor)开始,指定你工程名,默认的构建文件目标以及工程基目录等内容。
将此工程称为:irssibot,默认的目标为all;
<?xml version="1.0"?> <!-- Comments are just as important in buildfiles,do not --> <!-- avoid writing them! --> <!-- exmaple build file for "ant: the definitive guide" --> <!-- and its sample project: irssibot --> <project name="irssibot" difault="all" basedir=".">
(2). 应该定义哪些特性和DataType以用于整个构建中?
为每个子目录定义一个特性,并根据他的作用为之命名(即全局变量),这样即使目录名修改了只要在构建文件中修改一处即可。
<!-- project directories --> <property name="src.dir" value="src" /> <property name="doc.dir" value="doc" /> <property name="dist.dir" value="dist" /> <property name="lib.dir" value="lib" /> <property name="bin.dir" value="bin" /> <!-- Temporary build directory names --> <property name="build.dir" value="build" /> <property name="build.classes" value="${build.dir}/classes" /> <property name="build.doc" value="${build.dir}/doc" /> <property name="build.lib" value="${build.dir}/lib" />
对于某些任务,对特性也适于采用全局定义,列如:定义一个全局特性,它将通知javac任务是否生成带调试信息的字节码。
因此javac任务的所以实例都会使用此特性。
<!-- global settings --> <property name="debug.flag" value="on"/>
设置build.compiler特性,在此其值为modern,它表示javac使用java SDK工具包(即Java SDK 1.3及更高版本)中可用的,最新版本的SUN编译器。 对于许多刚开始接触Ant的人,如果发现此处有该特性,而该特性在构建文件中从来没有再用到,就会感到困惑。
<!-- global magic property for <javac> --> <property name="build.compiler" value="modern" />
深入到工程主要目标之前,还有最后一步需要完成,irssibot工程附带你 一组库,即mysql.jar和xerces.jar。
为此我们定义了类路径(classpath),它包括你这些库,而且还可以加入我们自己将类可能增加的库,库都放在lib目录下。
<path id="classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </path>
(3). 创建目录,在对目标进行编译或打包时,需要创建哪些目录?
ant将所有已编译的类文件保存在build目录及其子目录下,所以我们要创建此构建目录。
另外,增加你一些内容,记录构建的时间,这对于自动的构建极为有用。
<!-- Target to create the build directories prior to a compile target --> <!-- we also mark the start time of the build for the log. --> <target name="prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.lib}"/> <mkdir dir="${build.classes}"/> <mkdir dir="${build.classes}/modules"/> <tstamp/> <echo message="${TSTAMP}"/> </target>
(4). 编译工程并打包至JAR(可以将编译和打包分成两步来完成)
<!-- Build the IRC bot application --> <target name="bot" depends="prepare"> <!-- compile the application classes, not the module classes --> <javac destdir="${build.classes}" debug="${debug.flag}"> deprecation="on"> <!-- we could have used javac srcdir attribute --> <src path="${src.dir}"/> // 此句是不执行modules包目录下的java文件 <exclude name="irssibot/modules/**"/> <classpath refid="classpath"/> </javac> <!-- package the application into a JAR --> <jar jarfile="${build.lib}/irssibot.jar" basedir="${build.classes}"> //除了modules模块包目录下的文件其他文件都打包到irssibot.jar <exclude name="irssibot/modules/**"/> </jar> </target>
(5). irssibot还包括一组模块,它们扩展了bot的功能,在此将模块编译并打包成一个单独的JAR。将模块类文件和应用类文件相分离,使得修改和增加模块更方便,不易混淆。
<!-- Build the IRC bot modules --> <target name="modules" depends="prepare,bot"> <!-- compile the application classes, not the module classes --> <javac destdir="${build.classes}/modules" debug="${debug.flag}" deprecation="on"> <!-- we could have used javac srcdir attribute --> <src path="${src.dir}"/> <include name="irssibot/modules/**"/> <classpath refid="classpath"/> </javac> <!-- bundle the modules as a JAR --> <jar jarfile="${build.lib}/irssimodules.jar" basedir="${build.classes}/modules"> <include name="irssibot/modules/**"/> </jar> </target>
(6). 构建默认目标叫all, 如果调用ant时未带有任何参数,则ant会执行all目标。
(建议编写一个帮助目标,在调用ant不带任何参数时显示文件的帮助文档).
<target name="all" depends="bot,modules"/>
在执行这个目标时,在运行all内部的任何元素之前,会执行bot和modules这两个目标,而且必须按顺序成功地完成,这样ant才能开始处理all,在此all目标中没有任何元素,因此bot和modules目标的成功就相当于all目标成功。
(7). 构建javaDoc目标,与编译相比,JavaDoc的处理非常慢,不希望每次构建时都等待JavaDoc的处理,在编写自己的JavaDoc目标时请考虑这些问题。
<!-- generate the API documentation irssibot and the --> <!-- modules --> <target name="javadoc depends="bot"> <mkdir dir="${doc.dir}/api"/> <javadoc packagenames="irssibot.*" sourcepath="${doc.dir}/api" author="true" version="true" use="true"> <classpath refid="classpath"/> </javadoc> </target>
(8). 清除构建文件
应该将构建过程中生成的所有内容都予以删除,并重新开始构建,只有这样才能保证所有需要编译的内容确保得到编译,将这样的构建成为干净的构建(clean build)。
虽然javac任务要对已编译的类文件进行时间戳检查,但不是最佳,对于无依赖关系的类,带有静态最终处理(final)的类以及其他特殊情况,可能导致构建失败(从Ant的角度看是成功的)。
<!-- delete class files built during previous buids. Leave directories --> <target name="clean"> <delete> <fileset dir="${build.classes}" includes="**/*.class"/> </delete> </target> <!-- delete any created directories and their contents --> <target name="cleanall" depends="clean"> <delete dir="${build.dir}"/> <delete dir="${dist.dir}"/> <delete dir="${doc.dir}/api"/> </target>
注: cleanall并不需要依赖于clean,不过在实际应用中,clean目标可能不仅仅是删除文件,在这种情况下,我们希望Ant在cleanall中处理clean,为安全起见,默认的包括此依赖关系是一种不错的做法。
(9). 发布工程
- 在应用准备发布之前,需要创建哪些目录?
- 是否需要将源代码与应用同时发布?
- 应用的发布由哪些内容组成?
下面的目标将创建发布目录,并复制类文件,脚本和最终应用的其他组件
<!-- deploy the application in a "ready-to-run " state --> <target name="deploy" depends="bot,javadoc"> <!-- create the distributioin directory --> <mkdir dir="${dist.idr}"/> <mkdir dir="${dist.idr}/bin"/> <mkdir dir="${dist.idr}/lib"/> <mkdir dir="${dist.idr}/doc"/> <mkdir dir="${dist.idr}/config"/> <!-- copy the primary program and modules --> <copy todir="${dist.dir}/lib"> <fileset dir="${build.classes}"/> <fileset dir="${build.lib}" includes="irssibot.jar"/> <fileset dir="${build.lib}" includes="irssimodules.jar"/> <fileset dir="${build.lib}" includes="*.jar"/> </copy> <!-- copy the documentation --> <copy todir="${dist.dir}/doc"> <fileset dir="${doc.dir}"/> </copy> <!-- copy the pre-fab configuration files --> <copy todir="${dist.dir}/config"> // 此任务只复制XML文件,配置目录(表示为${lib.dir})中的其余内容均保持不动 <fileset dir="${lib.dir}" includes="*.xml"/> </copy> <!-- copy the running scripts --> <copy todir="${dist.dir}/bin"> <fileset dir="${bin.dir}" includes="bot.sh"/> <fileset dir="${bin.dir}" includes="bot.bat"/> </copy> </target>
(10). irssibot工程的完整构建文件
<?xml version="1.0" encoding="utf-8"?> <!-- Comments are just as important in buildfiles,do not --> <!-- avoid writing them! --> <!-- Example build file for "Ant: The definitive guide" --> <project name="irssibot" default="all" basedir="."> <!-- project-wide settings. all directories are relative to the --> <!-- project directories --> <property name="src.dir" value="src"/> <property name="doc.dir" value="doc"/> <property name="dist.dir" value="dist"/> <property name="lib.dir" value="lib"/> <property name="bin.dir" value="bin"/> <!-- build directories --> <property name="build.dir" value="build" /> <property name="build.classes" value="${build.dir}/classes" /> <property name="build.doc" value="${build.dir}/doc" /> <property name="build.lib" value="${build.dir}/lib" /> <!-- global settings --> <property name="debug.flag" value="on"/> <property name="java.lib" value="${java.home}/jre/lib/rt.jar"/> <!-- global property for <javac> --> <property name="build.compiler" value="modern"/> <path id="classpath"> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </path> <target name="prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.lib}"/> <tstamp/> <echo message="${TSTAMP}"/> </target> <target name="all" depends="bot,modules"/> <!-- build the IRC bot application --> <target name="bot" depends="prepare"> <mkdir dir="${build.classes}"/> <javac destdir="${build.classes}" debug="${debug.flag}" deprecation="on"> <!-- we could have used javac srcdir attribute --> <src path="${src.dir}"/> <exclude name="irssibot/modules/**"/> <classpath refid="classpath"/> </javac> <jar jarfile="${build.lib}/irssibot.jar" basedir="${build.classes}"> <exclude name="irssibot/modules/**"/> </jar> </target> <!-- build the IRC bot modules --> <target name="modules" depends="prepare,bot"> <mkdir dir="${build.classes}/modules"/> <javac destdir="${build.classes}/modules" debug="${debug.flag}" deprecation="on"> <!-- we could have used javac srcdir attribute --> <src path="${src.dir}"/> <include name="irssibot/modules/**"/> <classpath refid="classpath"/> </javac> <jar jarfile="${build.lib}/irssimodules.jar" basedir="${build.classes}/modules" manifest="MANIFEST.MF"> <manifest> <attribute name="ModuleType" value="irssibot"/> </manifest> <include name="irssibot/modules/**"/> </jar> </target> <!-- deploy the application in a "ready-to-run" state --> <target name="deploy" depends="bot,javadoc"> <!-- create the distributioin directory --> <mkdir dir="${dist.idr}"/> <mkdir dir="${dist.idr}/bin"/> <mkdir dir="${dist.idr}/lib"/> <mkdir dir="${dist.idr}/doc"/> <mkdir dir="${dist.idr}/config"/> <!-- copy the primary program and modules --> <copy todir="${dist.dir}/lib"> <fileset dir="${build.classes}"/> <fileset dir="${build.lib}" includes="irssibot.jar"/> <fileset dir="${build.lib}" includes="irssimodules.jar"/> <fileset dir="${build.lib}" includes="*.jar"/> </copy> <!-- copy the documentation --> <copy todir="${dist.dir}/doc"> <fileset dir="${doc.dir}"/> </copy> <!-- copy the pre-fab configuration files --> <copy todir="${dist.dir}/config"> <fileset dir="${lib.dir}" includes="*.xml"/> </copy> <!-- copy the running scripts --> <copy todir="${dist.dir}/bin"> <fileset dir="${bin.dir}" includes="bot.sh"/> <fileset dir="${bin.dir}" includes="bot.bat"/> </copy> </target> <!-- generate the API documentation for the IRC library and the --> <!-- IRC bot using the library --> <target name="javadoc" depends="bot"> <mkdir dir="${doc.dir}/api"/> <javadoc packagenames="irssibot.*" sourcepath="${src.dir}" destdir="${doc.dir}/api" classpath="${lib.dir}/xerces.jar:${lib.dir}/mysql.jar" author="true" version="true" use="true"/> </target> <!-- delete class files built during prebvious builds Leave directories --> <target name="clean"> <delete> <fileset dir="${build.classes}" includes="**/*.class"/> </delete> <delete dir="${doc.dir}/api"/> </target> <!-- delete any created directories and their contents --> <target name="cleanall" depends="clean"> <delete dir="${build.dir}"/> <delete dir="${dist.dir}"/> <delete dir="${doc.dir}/api"/> </target> </project>
相关推荐
它通过XML定义的构建文件来描述构建步骤,使得开发者可以自动化编译、打包、测试等任务。 在描述中提到的“NULL”可能是指在尝试解决这个问题时,遇到了空指针异常(NullPointerException)或者是某个预期的对象或...
build.xml ant构建配置文件
标题中的“Ant构建文件”指的是Apache Ant,一个Java平台上的开源构建工具。它被广泛用于自动化Java项目的构建、编译、测试和部署过程。Ant基于XML,开发者可以通过编写XML配置文件来定义构建任务,这些任务可以是...
这一过程的关键在于理解Ant的构建文件和AXIS2的项目结构,确保所有依赖项都已就绪,并正确配置了构建参数。通过这一流程,开发者可以高效地管理AXIS2项目,从源码到可部署的服务进行自动化构建。
Ant的核心是build.xml文件,这是一个包含了一系列任务(tasks)的XML文档,这些任务定义了构建过程中的各种操作,如编译源代码、打包JAR文件、运行测试等。 描述中提到"ant-1.9.6.jar"是Ant的特定版本,这个版本...
2. 构建文件build.xml: build.xml包含了多个目标(target),每个目标是一系列任务(task)的集合。任务是Ant的基本工作单元,例如编译、复制、打包等。通过设置属性(property),可以为构建过程提供可配置的参数...
在myEclipse这样的集成开发环境中,可以方便地创建和管理这些Ant构建文件。 描述中提到的“ANT自编译的程序”是指利用Ant工具来自动化编译自身的过程。Ant能够处理编译Java源代码、生成JAR或WAR包、清理构建目录等...
2. `ant -buildfile test.xml`:指定要使用的构建文件,即`test.xml`,并执行默认目标。 3. `ant -buildfile test.xml dist`:使用`test.xml`文件,执行名为`dist`的目标。 4. `ant -buildfile test.xml -Dbuild=...
在本文中,我们将深入探讨Ant构建文件(build.xml)中的各个关键字及其用法。 首先,我们要理解Ant构建文件的基本结构。一个典型的build.xml文件通常包含以下几个部分:project元素,target元素,以及task元素。`...
#### 三、Ant构建文件详解 **构建文件**:构建文件是Ant的核心,它是一个XML文件,通常命名为 `build.xml`。这个文件定义了项目的构建逻辑,包括构建的不同阶段、依赖关系以及具体的操作指令。 - **基于XML的结构*...
Ant是Apache软件基金会开发的一款Java语言的构建工具,它的出现是为了替代Make等传统构建工具,更好地适应Java项目的需求。...通过编写和优化Ant构建文件,开发者可以提升项目的可维护性和持续集成的能力。
- `project`元素是Ant构建文件的根元素,它包含了一系列的属性和目标。 - `property`元素用于定义属性,如源代码目录和构建目录。 - `target`元素定义了一个个可执行的任务,例如`init`用于创建目录,`compile`用于...
Ant是基于XML的,它的主要构建文件是`build.xml`,其中包含了构建任务的定义。这些任务可以是简单的文件操作,如复制或删除,也可以是复杂的编译、测试和打包过程。Ant提供了许多内建的任务,但有时候这些内建任务...
3. **在Ant构建文件中引入YUI Compressor**:在build.xml中,使用`<taskdef>`标签引入YUI Compressor的任务定义,例如: ```xml ``` 4. **定义压缩目标**:创建一个或多个目标,分别处理js和css文件...
1. "CheckPeopleIsExist.sln" - 这通常是Visual Studio的解决方案文件,虽然Ant主要用于Java,但这个文件可能是用C#或VB.NET编写的项目,且可能与Ant构建过程有关联,例如使用Ant进行跨平台构建。 2. ...
1. ****:这是整个构建文件的根元素,它定义了项目的基本属性,如项目名称、默认目标等。 2. ****:这是构建过程中的具体步骤或阶段,每个`target`可以包含多个任务。你可以设置依赖关系,让某个`target`在另一个`...
- 属性可以在整个构建文件中使用,通过`<property>`元素定义,例如设置源代码目录、输出目录等。 - 属性可以被继承和覆盖,提供灵活的配置。 - 使用`${property_name}`引用属性值。 3. **路径元素(Path)** - ...
### ANT文件详解:深入理解ANT及其在项目构建中的应用 #### Ant的概念与起源 ...通过深入理解Ant的工作原理和构建文件的配置方式,开发者能够更高效地管理和自动化项目构建流程,提高软件开发的生产力。
现在,让我们创建一个简单的Ant构建文件。在任意目录下创建一个名为`build.xml`的文件,内容如下: ```xml <project name="HelloAnt" default="compile"> ${build.dir}"/> ${build.dir}/classes"/>...