2019独角兽企业重金招聘Python工程师标准>>>

Ant是一个构建工具,它可以帮助我们将项目开发过程中需要完成的各种步骤组织起来,通过一个简易的方式来构建整个项目。
一些典型的任务是:编译Java源代码、运行java程序、拷贝文件或目录、将编译完成的类打包等等。

一、 安装与配置

下载Ant,当前版本是1.9.4。http://ant.apache.org/bindownload.cgi

解压文件到目录D:\Software\develop\apache-ant-1.9.4

添加环境变量ANT_HOME,指向Ant解压后的目录。

测试Ant是否可用:

在命令行进入到Ant目录下的bin目录,运行ant -version。如果成功,显示结果如下:

备注:运行Ant时,需要进入Ant的bin目录。在环境变量path中添加Ant的bin目录,就能在任何目录下运行Ant。

二、ant关键元素

Ant的构件文件是基于XML编写的,默认名称为build.xml。为了更清楚的了解Ant,在这里编写一个简单的Ant程序,用来展现Ant的功能。

首先在E盘下建立一个build.xml文件,内容如下:

<?xml version="1.0"?>
<project name="helloWorld">  <target name="sayHelloWorld">  <echo message="Hello,Amigo"/>  </target>
</project>  

进入E盘,运行ant sayHelloWorld,展示如下:

接下来介绍本节重点:Ant的关键元素project、target、property、task。

1 project

project元素是Ant构件文件的根元素,Ant构件文件至少应该包含一个project元素,否则会发生错误。

在每个project元素下,可包含多个target元素。接下来向读者展示一下project元素的各属性。
1)name属性
用于指定project元素的名称。
2)default属性
用于指定project默认执行时所执行的target的名称。
3)basedir属性
用于指定基路径的位置。该属性没有指定时,使用Ant的构件文件的附目录作为基准目录。
下面给读者一个简单的例子来展示project的各元素的使用。修改build.xml文件,修改后的内容如下:

<?xml version="1.0"?>
<project name="projectStudy" default="sayBaseDir" basedir="./">  <target name="sayBaseDir">  <echo message="The base dir is: ${basedir}"/>  </target>
</project>  

从上面的内容我们可以看出,在这里定义了default属性的值为sayBaseDir。

即当运行ant命令时,若未指明执行的target时,默认执行的target的sayBaseDir。

同时还定义了basedir属性的值为"./",运行ant命令,可看到运行的结果,如下所示:

Buildfile: E:\workspace\scrawl\build.xml
sayBaseDir:
     [echo] The base dir is: E:\workspace\scrawl
BUILD SUCCESSFUL
Total time: 109 milliseconds

2 target

它为Ant的基本执行单元,它可以包含一个或多个具体的任务。多个target可以存在相互依赖关系。它有如下属性:
1)name属性
指定target元素的名称,这个属性在一个project元素中是唯一的。我们可以通过指定target元素的名称来指定某个target。

2)depends属性
用于描述target之间的依赖关系,若与多个target存在依赖关系时,需要以“,”间隔。

Ant会依照depends属性中target出现的顺序依次执行每个target。被依赖的target会先执行。

3)if属性
用于验证指定的属性是否存在,若不存在,所在target将不会被执行。

4)unless属性
该属性的功能与if属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在target将会被执行。

5)description属性
该属性是关于target功能的简短描述和说明。

修改build.xml的内容如下:

<?xml version="1.0"?>
<project name="targetStudy">  <target name="targetA" if="ant.java.version">  <echo message="Java Version: ${ant.java.version}"/>  </target>  <target name="targetB" depends="targetA" unless="amigo">  <description>  a depend example!  </description>  <echo message="The base dir is: ${basedir}"/>  </target>
</project>  

运行ant targetB的结果:

因为有两个target,需要指定运行targetB。

3 property

该元素可看作参量或者参数的定义,project的属性可以通过property元素来设定,也可在Ant之外设定。
若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:<property file="build.properties"/>

property元素可用作task的属性值。在task中是通过将属性名放在“${”和“}”之间,并放在task属性值的位置来实现的。
Ant提供了一些内置的属性,它能得到的系统属性的列表与Java文档中System.getPropertis()方法得到的属性一致,这些系统属性可参考sun网站的说明。
同时,Ant还提供了一些它自己的内置属性,如下:
basedir:project基目录的绝对路径,该属性在讲解project元素时有详细说明,不再赘述;
ant.file:buildfile的绝对路径,如上面的各例子中,ant.file的值为E:"build.xml;
ant.version:Ant的版本,在本文中,值为1.9.4;
ant.project.name:当前指定的project的名字,即前文说到的project的name属性的值;
ant.java.version:Ant检测到的JDK的版本,在上例运行结果中可看到为1.7。

下面来看一个property元素使用的简单例子。修改build.xml文件,内容如下:

<?xml version="1.0"?>
<project name="propertyStudy" default="example">
<property name="name" value="amigo"/>
<property name="age" value="25"/>
<target name="example">  <echo message="name: ${name}, age: ${age}"/>
</target>
</project>  

三、常用任务

在Ant工具中每一个任务封装了具体要执行的功能,是Ant工具的基本执行单位。在本小节中,来看下Ant的常用任务及其使用举例。
1 copy任务
该任务主要用来对文件和目录的复制功能。举例如下:
Eg1.复制单个文件:<copy file="file.txt" tofile="copy.txt"/>
Eg2.对文件目录进行复制:
   <copy todir="../newdir/dest_dir"> <fileset dir="src_dir"/> </copy>

Eg3. 将文件复制到另外的目录:
 <copy file="file.txt" todir="../other/dir"/>

2 delete任务
对文件或目录进行删除,举例如下:
Eg1. 删除某个文件:<delete file="photo/amigo.jpg"/>
Eg2. 删除某个目录:<delete dir="photo"/>
Eg3. 删除所有的备份目录或空目录:
        <delete includeEmptyDirs="true">
               <fileset dir="." includes="**/*.bak"/>
        </delete>

3 mkdir任务
创建目录。eg:<mkdir dir="build"/>

4 move任务
移动文件或目录,举例如下:
Eg1. 移动单个文件:<move file="fromfile" tofile=”tofile”/>
Eg2. 移动单个文件到另一个目录:<move file="fromfile" todir=”movedir”/>
Eg3. 移动某个目录到另一个目录:
        <move todir="newdir"> <fileset dir="olddir"/> </move>

5 echo任务
该任务的作用是根据日志或监控器的级别输出信息。它包括message、file、append和level四个属性,举例如下:
<echo message="Hello,Amigo" file="logs/system.log" append="true">

四、利用ant构建java工程

Ant可以代替使用javac、java和jar等命令来执行java操作,从而达到轻松的构建和部署Java工程的目的。

1 用javac任务来编译java程序

首先我们建立名为antstudy的Java工程,建立src目录为源代码目录,在src目录下建立HelloWorld.java这个类文件。
同时在antstudy工程的根目录下建立build.xml文件,在该文件中编译src目录下的java文件,并将编译后的class文件放入build/classes目录中.在编译前,需清除classes目录。

<?xml version="1.0"?>
<project name="scrawl" default="compile" basedir=".">  <target name="clean">  <delete dir="build"/>  </target>  <target name="compile" depends="clean">  <mkdir dir="build/classes"/>  <javac srcdir="src" destdir="build/classes"/>  </target>
</project>  

程序运行出错:

BUILD FAILED
E:\workspace\scrawl\build.xml:9: Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK.
It is currently set to "C:\Program Files\Java\jre7" 

因为JAVA_HOME没有设定。对于单独一个类,不需要依赖其它jar包的工程是可以的。

2 用java任务运行java程序

Ant中可以使用java任务实现运行Java程序的功能。下面在1的例子中进行如下的修改,修改后的build.xml文件的内容如下:

<?xml version="1.0"?>
<project name="javaTest" default="run" basedir=".">  <target name="clean">  <delete dir="build"/>  </target>  <target name="compile" depends="clean">  <mkdir dir="build/classes"/>  <javac srcdir="src" destdir="build/classes"/>  </target>  <target name="run" depends="compile">  <java classname="HelloWorld">  <classpath>  <pathelement path="build/classes"/>  </classpath>  </java>  </target>
</project>  

运行ant,即可输出结果。

3 使用jar任务生成jar文件

<target name="jar" depends="run">
<jar destfile="helloworld.jar" basedir="build/classes">  <manifest>  <attribute name="Main-class" value="HelloWorld"/>  </manifest>  </jar>
</target>  

此时将ant的project的default属性设置为jar,同时运行该build.xml文件,运行完毕后,可看到在工程目录下生成了一个jar包HelloWorld.jar。

4 用Ant为java工程打包

<project default="jar" name="Acid">  <!-- 工程目录结构  project  |-bin  |-src  |-lib  |-out  |-build.xml  -->  <property name="lib.dir" value="lib"/>  <property name="src.dir" value="src"/>  <property name="classes.dir" value="bin"/>  <property name="output.dir" value="out"/>  <property name="jarname" value="scrawl.jar"/>  <property name="mainclass" value="com.sogou.scrawl.IndexFiles"/>  <!-- 第三方jar包的路径 -->  <path id="lib-classpath">  <fileset dir="${lib.dir}">  <include name="**/*.jar"/>  </fileset>  </path>  <!-- 1. 初始化工作,如创建目录等 -->  <target name="init">  <mkdir dir="${classes.dir}"/>  <mkdir dir="${output.dir}"/>  </target>  <!-- 2. 编译 -->  <target name="compile" depends="init">  <javac srcdir="${src.dir}" destdir="${classes.dir}">  <compilerarg line="-encoding UTF-8"/>  <classpath refid="lib-classpath"/>  </javac>  </target>  <!-- 3. 打包jar文件 -->  <target name="jar" depends="compile">  <copy todir="${output.dir}/lib">  <fileset dir="${lib.dir}"/>  </copy>  <!--Create a property containing all .jar files,  prefix lib/, and seperated with a space-->  <pathconvert property="mf.classpath" pathsep=" ">  <mapper>  <chainedmapper>  <!-- jar包文件只留文件名,去掉目录信息 -->  <flattenmapper/>  <!-- add lib/ prefix -->  <globmapper from="*" to="lib/*"/>  </chainedmapper>  </mapper>  <path refid="lib-classpath"/>  </pathconvert>  <!-- jar文件的输出路径 -->  <jar destfile="${output.dir}/${jarname}" basedir="${classes.dir}">  <manifest>  <attribute name="Main-class" value="${mainclass}"/>  <attribute name="Class-Path" value="${mf.classpath}"/>  </manifest>  </jar>  </target>
</project>  

转载于:https://my.oschina.net/mickelfeng/blog/1531272

使用Ant打包java程序相关推荐

  1. ant java xml文件,ant 学习(2)-ant开发java程序,buile.xml文件分离

    用Ant 开发java 程序----以及将build.xml文件拆分 用Ant 开发java 程序,以HelloWord 为例 1> 本次实例的目录结构: c:\ant_test 主目录 --- ...

  2. 图片资源加载路径分析以及netbeans打包java程序,并包含图片资源

     1. 首先说说如何将图片导入程序中 图片放在images文件夹下,该文件夹放在不同地方,程序中有不同的加载方法. (1)images/test.png放在了src下,则程序中加载的路径为:new I ...

  3. 教你打包Java程序,jar转exe随处可跑

    本文出自One Coder博客,转载请务必注明出处:http://www.coderli.com/archives/runnablejar-to-exe/ 发现很多人问如何把Jar转成exe程序.可能 ...

  4. eclipse中的java包awt_Eclipse中打包java程序

    Java应用程序可以脱离Eclipse运行,但在运行之前要把应用程序打成一个JAR包,Eclipse下打包的方式方法和标准的AWT/SWUNG程序基本一样,主要有以下几点: a.MANIFEST.MF ...

  5. 利用InstallAnywhere 打包java程序

    InstallAnywhere 的使用跟其他应用程序差不多, 最有可能出现问题的是带 jre 的 java 程序打包. 先简要介InstallAnywhere 的操作步骤: 运行程序 -> 创建 ...

  6. 使用exe4j打包Java程序

    为什么80%的码农都做不了架构师?>>>    下载并且安装exe4j,网盘下载地址点这里! 密码:VtFNhP exe4j需要激活,可以百度一下,很简单!不激活导出的exe文件会有 ...

  7. netbeans打包java程序,并包含外部jar包

    1. 在Netbeans的文件栏目中找到build.xml文件,在最后一行前面加入如下文本: <target name="package-for-store" depends ...

  8. 利用exe4j将java程序打包成exe可执行文件

    利用exe4j将java程序打包成exe可执行文件 一直在用exe4j,很好用,包括现在电脑中很多在使用的java程序,都是用exe4j打包的,所以也想做一些博客,来跟小伙伴们一起分享我的学习,让大家 ...

  9. 打包java程序生成exe

    打包java程序生成exe 目标 我们知道c++的控制台程序编译运行以后就会生成一个exe可执行文件,在电脑上可以直接双击运行,但是java是跨平台的语言,编译运行以后的字节码文件.class是和平台 ...

  10. java程序打包成exe安装包总结

    经过很长时间的尝试,终于大致清楚了java程序打包成exe的过程,特做此总结. 首先打包成exe文件有两种方式,一种是通过javafx本地打包的方式,参考文章https://code.makery.c ...

最新文章

  1. 2018 中国AI人才大调查:14张图表解读他们来自何处,又将去往何方?
  2. Transformer新玩法登Nature子刊
  3. python标准库学习9
  4. 【Python】3D Axis
  5. 文件html怎么另存为wps,WPS文字中另存为功能详解(wps文字怎么保存到指定文件夹)...
  6. 经典的机器学习方面源代码库(非常全,数据挖掘,计算...)
  7. ApacheCN 安卓译文集(二)20211226 更新
  8. 十分钟,我搞定了一个人物检测模型
  9. ldap实现用户认证
  10. 【C++入门】从C到C++
  11. 如何用iMazing备份和恢复辐射避难所(附工具下载)
  12. WIN7封装教程2018系列(六)—封装
  13. 选文字游戏 一个根据颜色来选择对应文字的小游戏
  14. 猜数字(超级简单题目)
  15. NXP-MPC5748G车载MCU使用(食用)方法(踩坑)实用指南(骗人教程)(一):创建工程与导入
  16. 我感觉的优美诗句品鉴(不定时更新)
  17. LTspice raw文件格式
  18. 不断升级的ip可视对讲介绍
  19. pandas的get_dummies
  20. [PYQT5] 主窗口弹出子窗口

热门文章

  1. Atitit diy战略 attilax总结
  2. Atitit。  工作流引擎的发展趋势
  3. Atitit. 衡量项目规模 ----包含的类的数量 .net java类库包含多少类 多少个api方法??
  4. atitit.web ui 结构建模工具总结
  5. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结
  6. paip.解决 Gtk-CRITICAL **: IA__gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed
  7. paip.提升用户体验-----填写EMAIL时自动提示完成
  8. GSM/GPRS MODEM 的上网设置
  9. Julia: 使用Flux实现手写数字识别
  10. (转)策略回测的框架、实现、测试