在java开发中,ant是一个古老而成熟的工具,集成了众多开发中用到的命令和任务,可以批量和自动执行编译 构建 打包 测试 分发等。虽然现在很多IDE工具都已经将此过程自动化,开发时开发人员无需使用ant也能完成开发任务。但是遇到重复执行 批量执行时,IDE工具就显得力不从心了。遇到重复和批量操作时,一个任务需要点很多次鼠标操作,才能完成,特别是需要重复修改和测试的功能。
现在的开发中,maven打包工具已在大多数JAVA项目中使用,也是编译 构建 打包 测试等过程。maven和ant的区别在于关注点不同,maven关注于项目本身,仅是依赖管理、项目生命周期管理,对于项目以外的文件复制、创建文件夹、执行系统命令、执行java命令、多个任务之间的依赖管理等力不从心,但ant提供了
AntCall、ANTLR、AntStructure、AntVersion、Apply/ExecOn、Attrib、Augment、Available、Basename、Bindtargets、BuildNumber、BUnzip2、BZip2、Cab、Continuus/Synergy Tasks、CvsChangeLog、Checksum、Chgrp、Chmod、Chown、ClearCase Tasks、Componentdef、Concat、Condition、Supported conditions、Copy、Copydir、Copyfile、Cvs、CVSPass、CvsTagDiff、CvsVersion、Defaultexcludes、Delete、Deltree、Depend、Dependset、Diagnostics、Dirname、Ear、Echo、Echoproperties、EchoXML、EJB Tasks、Exec、Fail、Filter、FixCRLF、FTP、GenKey、Get、GUnzip、GZip、Hostinfo、Image、ImageIO、Import、Include、Input、Jar、Jarlib-available、Jarlib-display、Jarlib-manifest、Jarlib-resolve、Java、Javac、JavaCC、Javadoc/Javadoc2、Javah、JDepend、JJDoc、JJTree、Jlink、Jmod、JspC、JUnit (3 & 4)、JUnitLauncher (JUnit 5)、JUnitReport、Length、Link、LoadFile、LoadProperties、LoadResource、Local、MacroDef、Mail、MakeURL、Manifest、ManifestClassPath、MimeMail、Mkdir、Move、Native2Ascii、NetRexxC、Nice、Parallel、Patch、PathConvert、PreSetDef、ProjectHelper、Property、PropertyFile、PropertyHelper、Pvcs、Record、Rename、RenameExtensions、Replace、ReplaceRegExp、ResourceCount、Retry、RExec、Rmic、Rpm、SchemaValidate、Scp、Script、Scriptdef、Sequential、ServerDeploy、SetPermissions、SetProxy、SignJar、Sleep、SourceOffSite、Sound、Splash、Sql、Sshexec、Sshsession、Subant、Symlink、Sync、Tar、Taskdef、Telnet、Tempfile、Touch、Translate、Truncate、TStamp、Typedef、Unjar、Untar、Unwar、UnXZ、Unzip、Uptodate、VerifyJar、Microsoft Visual SourceSafe Tasks、Waitfor、War、WhichResource、WebLogic JSP Compiler、XmlProperty、XmlValidate、XZ、XSLT/Style、Zip
等159个常用任务,详细的任务说明ant任务说明https://ant.apache.org/manual/index.html
是否可以将两者结合使用呢,让maven关注项目生命周期,ant来作maven不能作的任务,互相作有益的补充,巨鲸信息的技术人员,尝试使用了如下配置,来完成maven和ant的结合使用。
ant的配置方式有两种,第一种使用IDE如eclipse系统自带的ANT工具,无需配置。第二种,IDE之外,自己单独安装的ANT工具。这里推荐使用第一种方式,eclipse会自动识别当前项目的目录位置,ant脚本即是在当前目录中执行,简少配置,同时与项目结合也较好。第二种配置,请参考如下配置:
下载地址:http://ant.apache.org/,在本文中下载的是1.7.0版本。解压到某个目录(例如E:"apache-ant-1.7.0),即可使用。
添加系统环境变量:ANT_HOME,该变量指向Ant解压后的根目录,在此为E:"apache-ant-1.7.0。
安装与配置完毕后,读者可以测试一下Ant是否可用,首先进入Ant的bin目录,运行命令ant –version,若安装和配置成功,则会显示Ant版本信息
由上可以看出,读者运行Ant的命令时,需要进入到Ant的bin目录,如何才能让系统自动 找到Ant呢?这时需要读者在系统环境变量path中添加Ant的bin目录。设置完成后,我们就可以在任何目录(例如C:"Documents and Settings"AmigoXie目录)输入Ant的命令,来获得命令的运行结果。
maven的配置,请参考如下配置:
设置 Maven 环境变量
添加环境变量 MAVEN_HOME:
右键 "计算机",选择 "属性",之后点击 "高级系统设置",点击"环境变量",来设置环境变量,有以下系统变量需要配置:
新建系统变量 MAVEN_HOME,变量值:E:\Maven\apache-maven-3.3.9,编辑环境变量Path,追加%MAVEN_HOME%\bin\;我们可以通过DOS命令检查一下我们是否安装成功:
mvn -v
好了,至此 maven和ant两个工具都已配置成功,我们在项目中配置ant脚本,让ant开始配合maven工作。在项目根目录新建build.xml文件,添加如下内容,来调用Maven命令:
<?xml version="1.0" encoding="UTF-8"?> <project name="myproject" default="install" basedir="."> <description> 自动化工具 </description> <property name="build" location="build"/> <property name="dist" location="dist"/> <target name="pkg-a"> <echo>打包。。。</echo> <exec executable="mvn.cmd"> <arg value="-f" /> <arg value="project-a\pom.xml" /> <arg value="clean" /> <arg value="package" /> <arg value="-Dmaven.test.skip=true" /> </exec> <echo>打包成功!</echo> </target> <target name="install-a" depends="install-b,install-c"> <exec executable="mvn.cmd"> <arg value="-f" /> <arg value="project-a\pom.xml" /> <arg value="clean" /> <arg value="install" /> <arg value="-Dmaven.test.skip=true" /> </exec> </target> <target name="install-b"> <exec executable="mvn.cmd"> <arg value="-f" /> <arg value="project-b\pom.xml" /> <arg value="clean" /> <arg value="install" /> <arg value="-Dmaven.test.skip=true" /> </exec> </target> <target name="install-c"> <exec executable="mvn.cmd"> <arg value="-f" /> <arg value="project-c\pom.xml" /> <arg value="clean" /> <arg value="install" /> <arg value="-Dmaven.test.skip=true" /> </exec> </target> </project>
添加完配置文件,在eclipse里,有个ant视图,打开ant视图,会自动显示该build.xml里的target,选中一个执行即可,任务间会有依赖,选中有依赖的任务,会依次调用maven执行任务。各个任务会依次进行,中间不会停顿,不用点鼠标干预,完全自动化。若多次执行,会发现节少了大量的时间和精力。河南巨鲸信息技术有限公司,专注于信息技术,使用成熟的信息技术服务社会!