ant之l详解
接触ant也有⼀段时间了,为了以后更好的利⽤ant,今天就做⼀个⼩⼩的总结吧。
Ant具有 编译 Java程序,同时产⽣ javadoc,⽣成⼀个 Jar 或 war⽂件,实现⽂件的副本等⼀些功能,这些功能只需要通过l配置⽂件定义⼀序列的target即可。在Eclipse集成环境下可以很⽅便的使⽤ant管理⼯程。直接在l⽂件上右键即可。如图所⽰:
当然了,这是由于Eclipse集成了ant,所以可以如此的⽅便。如果我们要单独的使⽤ant,还要下载ant包并做⼀些简单的配置才能使⽤。
使⽤ant可分为以下步骤:下载ant包,配置ant,编写l配置⽂件
下载ant包:
我上传了⼀个1.8版本的ant包,需要的话可以下载。
解压后有如下⽬录结构:
配置:
因为我们是在cmd窗⼝下执⾏ant命令的,所以我们必须在环境变量path后添加上图bin⽬录的绝对路径,类似于这
样:...;E:\java\jar_source\jar\apache-ant-1.8.2\bin
在cmd窗⼝下执⾏ant命令:
如果是这样的话,那就是配置好了,它提⽰不到l⽽不是不到ant命令。
我们需要到l⽂件所在⽬录的上⼀级⽬录执⾏ant命令才可以,这个后⾯会细说。
编写l⽂件:
先看⼀个例⼦,后⾯讲起来就不会那么抽象了。
1<?xml version="1.0" encoding="utf-8"?>
2<project name="anttest" default="compile" basedir=".">
3
4 <property name="build.dir" value="${basedir}/build"/>
5 <property name="build.src" value="${basedir}/build/src"/>
6 <property name="build.webinf" value="${basedir}/build/WEB-INF"/>
7 <property name="build.des" value="${basedir}/build/WEB-INF/classes"/>
8
9 <target name="init">
10 <tstamp/>
11
12 <mkdir dir="${build.dir}"/>
13 <mkdir dir="${build.src}"/>
14 <mkdir dir="${build.webinf}"/>
15 <mkdir dir="${build.des}"/>
16
17 <copy todir="${build.dir}">
18 <fileset dir="${basedir}">
19 <include name="*.jsp"/>
20 <include name="bookstore/*.jsp"/>
21 <include name="simpledemo/*.jsp"/>
22 <include name="simpledemo/*.html"/>
23 <include name="src/**"/>
24 <include name="tagjsp/*.jsp"/>
25 <include name="WEB-INF/**"/>
26 <exclude name="l"/>
27 </fileset>
28 </copy>
29 </target>
30
31 <target name="compile" depends="init" >
32 <property name="environment" value="env"/>
33 <property name="servletapi" value="${env.CATALINA_HOME}/lib/servlet-api.jar"/>
34 <javac srcdir="${build.src}" destdir="${build.des}" classpath="${servletapi}"/>
35 </target>
36
37
38</project>
⾸先,是⼀个<project>根元素,project 可以包含的元素有:property、path、taskdef、target、task。具体如下:project 可以包含 0 到多个 property,property ⽤于设置属性值;
project 可以包含 0 到多个 path,path ⽤于设置环境变量;
project 可以包含 0 到多个 taskdef, taskdef ⽤于预定义任务。 Ant 默认定义了⼀些任务,也可以在这⾥添加⾃定义的;project 可以包含 0 到多个 target, ⽤于定义任务⽬标。 target 可以包含 0 到多个 task,task ⽤于执⾏⼀个任务操作;project 也可以直接包含 task,在每次编译时都会执⾏该任务。
下⾯详细讲解这些元素。
project:
配置⽂件只包含⼀个顶级元素 project,project 有三个属性,如:<project name="anttest" default="compile" basedir="."> name:项⽬名称,可以没有
default:当没有指定 target 时使⽤的默认 target,必须有
basedir:⽤于计算所有其他路径的基路径。该属性可以被 basedir property 覆盖。当覆盖时,该属性被忽略。如果属性和 basedir都没有设定,就使⽤ l⽂件的⽗⽬
录,这个属性也不是必须的
property:
类似于编程语⾔中的变量吧,定义<property>是为了⽅便后⾯target的编写。如:<property name="build.dir"
value="${basedir}/build"/>
另外说下,ant编译时可以使⽤的属性值有三部分:<property>定义的,java中Property("...")可以得到的(如os.name),还有就是ant内置的属性(不常⽤,不说
了)
path:
通过path可以包含⼀批路径,每⼀个path有⼀个id属性,使⽤时引⽤该id即可,如:
1<path id="st.classpath">
2 <pathelement location="${tomcat.build}/webapps/examples/WEB-INF/classes"/>
3 <pathelement location="${test.classes}"/>
4 <pathelement location="${junit.jar}"/>
5 <pathelement location="${hamcrest.jar}"/>
6 <pathelement location="${easymock.jar}"/>
7 <pathelement location="${cglib.jar}"/>
8 <pathelement location="${objenesis.jar}"/>
9 <path refid="compile.classpath" />
10 <path refid="tomcat.classpath" />
11 </path>
可以看到,path有⼦元素<pathelement>,此外还可以有<fileset>⼦元素,这个后⾯再说。<path>还可以引⽤别的<path>,如上所⽰
target:
通过<target>定义要执⾏的任务,使⽤depends属性来实现<target>之间的依赖关系。被依赖的任务先执⾏,所有的任务最多被执⾏⼀次。
<target>有如下5个属性:
name:target 的名字,这个是必须的
depends:⽤逗号分隔的 target 的名字列表,也就是依赖表,这个可以没有
if:执⾏ target 所需要设定的属性名,这个可以没有
unless:执⾏ target 需要清除设定的属性名,这个可以没有
description:关于 target 功能的简短描述,这个也不是必须的
如:
<target name="validate-eoln" depends="build-prepare,compile-prepare">...</target>
task:
task是⼀段可执⾏的代码,ant内置了⼀些task,⽅便⽤户使⽤,主要包括如下⼏类:
⽂件路径操作:mkdir、copy、delete、move
Java 相关:javac、java
打包相关:jar、war、ear
时间戳:tstamp
执⾏ SQL:sql
发送邮件:mail
详细说说⼏个常⽤的:
<mkdir>:创建⼀个⽬录,如果⽗⽬录不存在,则⽗⽬录也会被创建,如:<mkdir dir="${tomcat.output}/res/checkstyle"/>
<copy>:复制⽂件或⽂件夹,可以单个,也可以多个。如:
1<copy todir="${tomcat.classes}" encoding="ISO-8859-1">
2 <fileset dir="java">
3 <include name="**/*.properties"/>
4 <include name="**/*.dtd"/>
5 <include name="**/*.tasks"/>
6 <include name="**/*.xsd"/>
7 <include name="**/*.xml"/>
8 </fileset>
9 </copy>
或者:
1<copy tofile="${tomcat.build}/webapps/docs/appdev/l"
2 file="webapps/docs/l.txt"/>
其中**表⽰⽂件夹下所有的⽂件,*则是可以匹配任何⽂件名,所以上⾯的<copy>表⽰将java⽂件夹下的指定格式的⽂件复制到指定⽂件夹。也可以指定哪些⽂件不要复制,⽤<exclude>元素就可以了。
<delete>:与copy相对应了。如:
<delete dir="lib"/>
1<delete>
2<fileset dir="." includes="**/*.bak"/>
3</delete>
<move>:移动或重命名⼀组⽂件,⽤法和copy相似了。 <javac>:编译⼀组java源代码。如: <javac
srcdir="webapps/examples/WEB-INF/classes" destdir="${tomcat.build}/webapps/examples/WEB-INF/classes"
debug="${compile.debug}" classpath="${tomcat.classes}" excludes="**/CVS/**,**/.svn/**" </javac> 指定源⽂件位置,⽬标⽂件(class⽂件)存放位置,debug属性⽤于决定是否要输出debug信息,classpath属性则是指定编译时要⽤到的其他类⽂件。exclude指定哪些不要编译。 以下是javac的参数: <javac>任务和javac命令是相似,它编译两种类型的java⽂件: (1) 没有被编译的java⽂件 (2) 曾经编译过,但是class⽂件版本和当前对应的java⽂件版本不匹配的java⽂件。 1) javac命令⽀持的参
数: AttributesDescription srcdir: 必须的,除⾮嵌套有<src>标签。包含源⽂件的⽂件夹 bootclasspath: 编译过程中需要导⼊class⽂件会被导⼊ bootclasspathref: 编译过程中需要引⽤的class⽂件夹⽬录 classpath: The class path to use. ⽂件夹中class会被导⼊的jar包 classpathref: ⽂件夹中class⽂件会被引⽤的jar包 compiler: 指定要使⽤的编译器。如果未设置该特性,将使⽤ buildpiler 属性的值(如果设置)。否则,将使⽤当前 JVM 的默认编译器。 例⼦:设置环境变量JIKESHOME 为jdk 的路径,设置 ANT_OPTS=-Dbuildpiler=jdk,将 jdk 路径添加到系统 PATH 中, 然后在所有的ant任务就默认使⽤jdk了, 如果你想在单个⼯程中使⽤ ant, 就不要添加 ANT_OPTS 环境变量, 只需要修改 l 中 javac 标签中的 compiler 为 jdk. debug: 当值未为true时产⽣调试信息 debuglevel: 相当于命令⾏中要追加到 -g 命令⾏开关后⾯的关键字列表。这将会被除 modern 和 classic(ver >= 1.2) 以外的所有实现忽略。合法值是 none 或下列关键字的逗号分隔列表:lines、vars 和source。如果不指定 debuglevel,则默认情况下,将不会在 -g 的后⾯追加任何关键字。如果不打开 debug,该特性将被忽略。
mysql下载libs包的网址depend: 这个任务依赖的任务。当运⾏这个任务时,⾸先按照顺序依次执⾏完依赖的任务,如果出错将停⽌执⾏ deprecation: 假如为真,将会给出不建议使⽤的API,默认值false destdir: 编译后⽂件存放的⽬标⽂件夹,默认是当前⽂件夹。 encoding:
指定编码格式 excludes: 必须排除的⽂件模式的列表,以逗号或空格分隔。如果忽略,将不会排除任何⽂件(默认排除⽂件除外)。 excludesfile: 该⽂件的每⼀⾏都将作为⼀个 exclude 模式。 extdirs: Specifies an alternative location of installed extensions that overrides the default. failonerror: 指定clientgen Ant 任务在出现错误的情况下是否继续执⾏。 此特性的有效值为 True 或 False。默认值为 True,这意味着即使遇到错误也要继续执⾏。 fork: 为true时在外部启⽤⼀个新的JDK 编译器进程执⾏编译。默认值是true,应⽤在需要配置编译器运⾏时环境时 includeantruntime: 指出是否应在类路径中包括 Ant 运⾏时程序库,默认为 yes。 includejavaruntime: 指出是否应在类路径中包括来⾃执⾏ JVM 的默认运⾏时程序库,默认为 no。 includes: 必须包括的⽂件模式的列表,以逗号或空格分隔。如果忽略,将包括所有⽂件。 includesfile: ⽂件名。该⽂件的每⼀⾏都将作为⼀个 include 模式。 listfiles: 为真时显⽰被编译⽂件列表,默认为 false memoryinitialsize 如果 javac 在外部运⾏,则是底层 JVM 的初始内存⼤⼩;否则将被忽略。默认为标准 JVM 内存设置。(例如:83886080、81920k 或 80m) memorymaximumsize: 如果 javac 在外部运⾏,则是底层JVM 的最⼤内存⼤⼩;否则将被忽略。默认为标准 JVM 内存设置。(例如:83886080、81920k 或 80m) nowarn: 为真时将忽略所有警告信息 optimize: 指出是否应该⽤优化⽅式编译源代码,默认为 off。 source: 假如设置为1.6,将激活断⾔。默认是1.3 sourcepath: 指定源资源⽂件夹。默认指向srcdir sourcepathref: 指定你想引⽤资源 target:
Specifies the VM version to generate class files for (for example, 1.1 or 1.3). verbose: 控制⽣成消息的输出量。 <java>:执⾏类⽂件,如: <java classname="test.Main"> <classpath> <pathelement
location="dist/test.jar"/> <pathelement path="${java.class.path}"/> </classpath> </java> <jar>:将⼀组⽂件打包,如: <jar destfile="${dist}/lib/app.jar" basedir="${build}/classes" includes="mypackage/test/**" excludes="**/Test.class"
manifest="my.mf" /> 其中manifest属性⽤于指定⾃⼰编写manifest⽂件,⽽不是由系统⽣成。 <war>:<jar>的扩展,⽤于打包web应⽤,如: <war destfile="myapp.war" webxml="src/l"> <fileset dir="src/html/myapp"/> <fileset
dir="src/jsp/myapp"/> <lib dir="thirdparty/libs"> <exclude name="jdbc1.jar"/> </lib> <classes dir="build/main"/> <zipfileset
dir="src/graphics/images/gifs"prefix="images"/> </war> <ear>:⽤于打包企业应⽤,如: <ear
destfile="${build.dir}/myapp.ear" appxml="${src.dir}/l"> <fileset dir="${build.dir}"
includes="*.jar,*.war"/> </ear> <tstamp>:⽤于产⽣时间格式,并放⼊ant属性中,具体有什么⽤处⽬前还不太清楚,如: <tstamp>
<format property="year" pattern="yyyy" locale="en"/> <format property="today" pattern="MMM d yyyy" locale="en"/>
<format property="today-iso-8601" pattern="yyyy-MM-dd" locale="en"/> <format property="tstamp" pattern="hh:mm:ss"/> </tstamp> <sql>:连接数据库,如: <sql driver="sql.Driver" url="jdbc:mysql://localhost:3306/mydb"
userid="root" password="root" src="data.sql" /> <sql driver="org.database.jdbcDriver" url="jdbc:database-url" userid="sa" password="pass" src="data.sql" rdbms="oracle" version="8.1." > </sql> 前者为mysql,后者为oracle。 l的讲解就到这⾥吧。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论