Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率。 Ant是 Java领域领先的构建工具,而Eclipse是主要针对Java程序员的集成开发环境(IDE)。Eclipse在可视化方面做得非常优秀,而Ant却提供了极强的构建功能。
安装
下载Ant工具包
环境变量Path中添加解压后bin目录
环境变量中添加:Ant_Home=解压目录
测试安装是否成功:ant -version
实践
方式一:Eclipse中运行Ant
新建Build.XML文件,放在工程目录下。Build.xml定义了Ant要执行的批处理命令,一般都命名为Build.xml,遵循标准可使开发更加规范。
src存放Java源文件
classes存放编译后的class文件
lib存放编译或者运行中的所有jar文件
web存放jsp或其他web文件
dist存放打包好的jar文件
- <?xml version="1.0" encoding="UTF-8"?>
- <!--name工程名,basedir相对根目录,“.”表示当前目录-->
- <project name="ictrcp" default="deploy" basedir=".">
- <!--定义变量,并为其赋值-->
- <!--必须放在最前面,可以确保能使用到编译平台的环境变量-->
- <property environment="env" />
- <!--定根目录,为下面的目录结构做准备,最好放在环境变量设置前边-->
- <property name="dist.dir" value="${basedir}/dist" />
- <!--打包的文件名-->
- <property name="webapp.name" value="ictrcp" />
- <!--Tomact和Ant基本配置,Tomact即编译好的文件存放处-->
- <property name="catalina.home" value="C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63" />
- <property name="ant.dir" value="C:\software\apache-ant-1.9.6-bin\apache-ant-1.9.6" />
- <!--需打包文件目录:jsp文件、java文件、配置文件、lib库-->
- <property name="webRoot.dir" value="${basedir}/webapp" />
- <property name="src.dir" value="${basedir}/src/main/java" />
- <property name="config.dir" value="${basedir}/src/main/resources" />
- <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />
- <!--打包文件存放在build文件夹下-->
- <property name="build.dir" value="${basedir}/build" />
- <!-- 使用eclipse jdt进行编译,而不使用JDK编译 -->
- <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />
- <!-- 初始化classpath,可以选择将那些文件include进来或者exclude出去-->
- <path id="project.classpath">
- <fileset dir="${lib.dir}">
- <include name="**/*.jar" />
- </fileset>
- <!-- 添加tomcat类路径 -->
- <fileset dir="${catalina.home}/lib">
- <include name="*.jar" />
- </fileset>
- <!-- ant lib包 -->
- <fileset dir="${ant.dir}">
- <include name="**/*.jar" />
- </fileset>
- </path>
- <!--pathconvert转换ant路径到指定的平台路径-->
- <pathconvert pathsep="${line.separator}| |-- "
- property="echo.path.compile"
- refid="project.classpath">
- </pathconvert>
- <!--打印日志信息-->
- <target name="print_classpath">
- <echo message="|-- compile classpath"/>
- <echo message="| |"/>
- <echo message="| |-- ${echo.path.compile}"/>
- </target>
- <!-- 删除之前的目录结构及其文件-->
- <target name="clear" description="清理旧文件">
- <delete dir="${build.dir}" />
- <delete dir="${dist.dir}" />
- <delete file="${catalina.home}/webapps/${webapp.name}.war" />
- <delete dir="${catalina.home}/webapps/${webapp.name}" />
- </target>
- <!--创建目录结构,用来存放生成的war、jar文件 -->
- <target name="init" depends="clear" description="创建初始化目录结构">
- <mkdir dir="${build.dir}/classes" />
- <mkdir dir="${dist.dir}" />
- </target>
- <!-- 编译java,将编译好的class文件放入到指定文件夹-->
- <target name="compile" depends="init" description="编译java文件">
- <echo message="begin compile..." />
- <javac srcdir="${src.dir}" destdir="${build.dir}/classes"
- includeantruntime="false" nowarn="on"
- source="1.7" target="1.7" deprecation="true" debug="true"
- encoding="UTF-8" classpathref="project.classpath"
- >
- <compilerarg line="-Xlint:unchecked" />
- <!-- <classpath refid="project.classpath" /> -->
- </javac>
- <!-- 为了保证后续build文件夹中classes文件夹内容与jenknis根据SVN代码一致-->
- <copy todir="${build.dir}/classes">
- <fileset dir="${src.dir}">
- <include name="**/*.xml" />
- <include name="**/*.properties" />
- <include name="**/*.sql" />
- </fileset>
- <fileset dir="${config.dir}">
- <include name="**/*.xml" />
- <include name="**/*.properties" />
- <include name="**/*.sql" />
- </fileset>
- </copy>
- <echo message="end compile..." />
- </target>
- <!-- 打成war包, 名称默认为项目名,依赖compile目标 -->
- <target name="war" depends="compile" description="将工程打成war包">
- <echo message="begin war..." />
- <war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}"
- webxml="${webRoot.dir}/WEB-INF/web.xml">
- <lib dir="${lib.dir}" />
- <classes dir="${build.dir}/classes" />
- <fileset dir="${webRoot.dir}">
- <include name="***.*" />
- </fileset>
- </war>
- <echo message="end war..." />
- </target>
- <!-- 入口 复制war包到tomcat的deploy目录,依赖war目标 -->
- <target name="deploy" depends="war" description="部署项目">
- <echo message="begin deploy..." />
- <copy file="${dist.dir}/${webapp.name}.war" todir="${catalina.home}/webapps" />
- <echo message="end deploy..." />
- </target>
- </project>
执行顺序
注:只是针对上面的build.xml文件执行顺序来画的
使用javacc编译存在一些无法编译的情况,这个时候可以使用eclipse的编译器jdt进行编译
使用jdt的时,javac必须制定版本否则无法编译
图:项目中去编译
右击-run as -ant Build
编译结果
- <span style="font-size:18px;">Buildfile: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build.xml
- clear:
- [delete] Deleting directory C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build
- [delete] Deleting directory C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\dist
- [delete] Deleting: C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\webapps\ictrcp.war
- [delete] Deleting directory C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\webapps\ictrcp
- init:
- [mkdir] Created dir: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build\classes
- [mkdir] Created dir: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\dist
- compile:
- [echo] begin compile...
- [javac] Compiling 1575 source files to C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build\classes
- [javac] ----------
- [javac] 1. WARNING in C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\src\main\java\ICT\tools\excel\DispatchExcelExport.java (at line 41)
- [javac] sheet.addMergedRegion(new Region(rowNumNew, (short) (0), rowNumNew,
- [javac] (short) (strs.length - 1)));
- [javac] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- [javac] The method addMergedRegion(Region) from the type HSSFSheet is deprecated
- [javac] ----------
- [javac] 2. WARNING in C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\src\main\java\ICT\tools\excel\DispatchExcelExport.java (a
- ………………………………
- \ProjectzlaqAction.java (at line 156)
- [javac] List<LabTypeStatistics> list = JSONArray.toList(arr,LabTypeStatistics.class);
- [javac] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- [javac] The method toList(JSONArray, Class) from the type JSONArray is deprecated
- [javac] ----------
- [javac] 182 problems (182 warnings)
- [copy] Copying 16 files to C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build\classes
- [echo] end compile...
- war:
- [echo] begin war...
- [war] Building war: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\dist\ictrcp.war
- [echo] end war...
- deploy:
- [echo] begin deploy...
- [copy] Copying 1 file to C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\webapps
- [echo] end deploy...
- BUILD SUCCESSFUL</span>
方式二:Eclipse集成的Ant
利用Ant插件来生成构建文件
根据项目的需求自行设置,比较简单
方式三:使用命令编译打包
1、配置环境变量:
ANT_HOME=<Ant解压目 录>
Path=";%ANT_HOME%\bin"
2、命令提示符:切换到项目目录
3、编译:ant deploy
即使脱离了IDE环境,只要正确安装了Ant,配置好环境变量,即可编译打包项目
Ant依次执行初始化,编译,测试,打包,生成API文档一系列任务,极大地提高了开发效率。即使没有友好的IDE编译环境,我们也可以轻松的将项目编译和打包,具体发布问题教给web容器就可以了。