Ant学习

Ant  :  another neat tool ;

Ant 本身是用Java语言来写的,所以Ant使用Java类来定义生成文件之间的依赖关系;

 

 

 

 

Ant 生成文件剖析:

 

 

 

 

 

 

 

 

Ant没有定义它自己的自定义语法;相反,它的生成文件是用XML编写的;

存在一组Ant能够理解的预定义XML元素,还可以定义新的元素来扩展Ant的功能;

每个生成文件仅有一个project元素,该元素作为根元素包含一个或多个target元素,一个target就是一个目标,是生成过程中已定义的一个步骤,它执行任意数量的操作,这些操作本身是由其他专用任务标签执行的,然后这些任务将根据需要被分组到各个target元素中;一次生成过程所必须的所有操作可以放入单个target元素中,但是那样会降低灵活性;所以一般将每个步骤含在它自己的target元素中。这样的话可以执行整体生成过程中的单独部分,不一定要执行其他部分。

1,  Project 元素的属性deault :如果在Ant被调用的时候没有指定目标,这个属性将指定要执行的目标。然后需要target元素来定义该目标本身。

例子:

<?xml varsion=”1.0”?>

<project default=”init”>

        <target name=”init”>

        </target>

</project>

当元素没有包含任何的内容时,我们可以写为<target name=”init”/>

       2,添加描述:用Ant自己的description元素或者XML注释;

                     <?xml version=”1.0”?>

                     <project default=”init” name=”Project Argon”>

                                   <description>A simple project introducing the user of ….

                                   </description>

                     <!—XML comments can also be user-- >

                     <target name=”init” description=”Initialize Argon database”>

                            <! - - perform initialization steps here - - >

                     </target>

                     </project>

3,属性:Ant 中的属性类似编程语言中的变量,有名称和值;但是属性是不可改变的;

定义一个属性:

<property name=”metal” value=”beryllium”/>

       引用这个属性:

              ${metal} 例:<property name=”metal-database” value=”${metal}.db”/>

             

Ant中预定义的属性:

1Java环境设置用于运行Ant的所有系统属性,可作为Ant属性使用:{user.home}

          ${ant.version}  ;

          ${basedir} 这个属性是项目目录的绝对路径;

2,平台无关的文件系统路径,在属性中用location来代替value:

              <property name=”database-file” location=”archive/databases/${metal}.db”/>

         <property name=”database-file” location=”archive/databases/${metal}.db”/>

              都会在不同的平台上有相同的行为;

       ******注意,文件名是相对的,它被认为是相对于项目的基目录;

       3,定义依赖关系:生成一个项目的多个步骤需要有特定的顺序;Ant不使用顺序指定 target的方法,而是采用依赖来实现:target元素的一个属性depends;

       <target name=”init”/>

       <target name=”preprocess” depends=”init”/>

       <target name=”complie” depends=”init,prepeocess”/>

       <target name=”package” depends=”compile”/>

       注意:目标出现在文件中的顺序并不重要,执行顺序是由depends属性唯一确定的;

 

 

 

 

      

      

 

 

 

 

运行Ant

 

 

 

 

1,命令行使用:Ant默认寻找一个build.xml的文件;所以如果你的生成文件就是用build.命名的,就不需要在命令行中指定它;

事实是使用其他名称的生成文件更方便,所以用: -buildfile<file> 或者-file<file>,,,-f<file>

-d 选项是另一个有用的参数,它用于设置随后可以在生成文件中使用的属性的值;这可以帮助你选择你的生成过程以某种方式开始;因为生成文件中定义的属性一经赋值就不能不改变了,所以如果你在命令中使用了-d metal=beryllium的话,-d 标志在读取生成文件中的信息之前设置了属性metal的值,那么生成文件中的初始属性设置就无效了;这可谓是动态的;

2IDE集成:省略,日后学会了再添加;

生成Java简单项目

1,编译Java代码的任务的编写方式:

<javac srcdir=”src”/>  这个标签寻找src目录中以.java为扩展名的所有文件,并对它们调用javac编译器,从而在相同的目录中生成类文件;如果添加destdir属性就可以把类文件放在一个单独的目录中;

Javac的其他属性  classpath  等价于-classpath ;    debug=”true”:指示编译器应该大调试信息编译源文件。

Javac标签不会编译:它的类文件已经存在,并且对应的源文件自从该类文件生成以来还没有改变过的源文件;如果不想这样,clean是一个很好的选择:移除生成的任何类文件;

Ant的特点是:如果某个任务能够确定所请求的操作不需要执行,那么该操作就会被跳过;

 

 

 

 

Ant,Javac编译器本身都是用Java语言实现的,所以运行Ant和执行Javac任务使用同一个JVM实例;这是高效的表现;

 

 

 

 

AntJavac任务的默认行为是调用运行Ant本身的任何JVM的标准编译器,然而如果你想要单独地调用编译器,比如你要使用一个高级别的编译器,你可以使用javacfork属性:<javac srcdir=”src” fork=”true”/>

例如:想要指定一个不同的javac可执行文件,并向它传递一个最大内存设置:

<javac srcdir=”src” fork=”ture” executable=”d:/sdk141/bin/javac” memoryMaximumSize=”128m”/>

2,创建jar文件的编写:

       <jar destfile=”package.jar” basedir=”classes”/>

将创建一个package.jar文件,并把classes目录中的所有文件而不只是类文件添加到其中;

Manifest属性:<jar destfile=”package.jar” basedir=”classes”>

                                     <manifest>

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

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

                                     </mainifest>

                        </jar>

注意,manifest本身是<jar>任务的一个属性,可以指定用做该jar文件的清单的文件;

但是这里manifest是个任务,被嵌套在了<jar>任务中;这个manifest任务能够象文件系统写入一个清单文件;

4,时间戳生成:

       <tstamp>

例如:<jar destfile=”package-${DSTAMP}.jar” basedir=”classes”/>

如果这个任务是20051113日调用,则生成的jar文件被命名为package-20051113.jar;

 

 

 

 

举例用了一下,确实TMD好用;

 

 

 

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=533308

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值