(2.2.6.3)构建工具Ant(二)—实践

时间:2021-07-28 04:38:14

Ant是Java平台下非常棒的批处理命令执行程序,能非常方便地自动完成编译,测试,打包,部署等等一系列任务,大大提高开发效率。  Ant是 Java领域领先的构建工具,而Eclipse是主要针对Java程序员的集成开发环境(IDE)。Eclipse在可视化方面做得非常优秀,而Ant却提供了极强的构建功能。

 

安装


下载Ant工具包

环境变量Path中添加解压后bin目录

环境变量中添加:Ant_Home=解压目录

测试安装是否成功:ant -version

(2.2.6.3)构建工具Ant(二)—实践

实践


方式一:Eclipse中运行Ant

    新建Build.XML文件,放在工程目录下。Build.xml定义了Ant要执行的批处理命令,一般都命名为Build.xml,遵循标准可使开发更加规范。

 

src存放Java源文件

classes存放编译后的class文件

lib存放编译或者运行中的所有jar文件

web存放jsp或其他web文件

dist存放打包好的jar文件


[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <!--name工程名,basedir相对根目录,“.”表示当前目录-->  
  4. <project name="ictrcp" default="deploy" basedir=".">  
  5.     <!--定义变量,并为其赋值-->  
  6.       
  7.     <!--必须放在最前面,可以确保能使用到编译平台的环境变量-->  
  8.     <property environment="env" />  
  9.     <!--定根目录,为下面的目录结构做准备,最好放在环境变量设置前边-->  
  10.     <property name="dist.dir" value="${basedir}/dist" />  
  11.     <!--打包的文件名-->  
  12.     <property name="webapp.name" value="ictrcp" />  
  13.       
  14.     <!--Tomact和Ant基本配置,Tomact即编译好的文件存放处-->  
  15.     <property name="catalina.home" value="C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63" />     
  16.     <property name="ant.dir" value="C:\software\apache-ant-1.9.6-bin\apache-ant-1.9.6" />  
  17.       
  18.     <!--需打包文件目录:jsp文件、java文件、配置文件、lib库-->  
  19.     <property name="webRoot.dir" value="${basedir}/webapp" />  
  20.     <property name="src.dir" value="${basedir}/src/main/java" />  
  21.     <property name="config.dir" value="${basedir}/src/main/resources" />  
  22.     <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />  
  23.       
  24.     <!--打包文件存放在build文件夹下-->  
  25.     <property name="build.dir" value="${basedir}/build" />  
  26.     <!-- 使用eclipse jdt进行编译,而不使用JDK编译  -->  
  27.     <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter" />   
  28.   
  29.     <!-- 初始化classpath,可以选择将那些文件include进来或者exclude出去-->  
  30.     <path id="project.classpath">  
  31.         <fileset dir="${lib.dir}">  
  32.             <include name="**/*.jar" />  
  33.         </fileset>  
  34.         <!-- 添加tomcat类路径 -->  
  35.         <fileset dir="${catalina.home}/lib">  
  36.             <include name="*.jar" />  
  37.         </fileset>  
  38.         <!-- ant lib包  -->  
  39.         <fileset dir="${ant.dir}">  
  40.             <include name="**/*.jar" />  
  41.         </fileset>  
  42.     </path>  
  43.   
  44.     <!--pathconvert转换ant路径到指定的平台路径-->  
  45.     <pathconvert pathsep="${line.separator}|   |-- "  
  46.              property="echo.path.compile"  
  47.              refid="project.classpath">  
  48.     </pathconvert>  
  49.       
  50.     <!--打印日志信息-->  
  51.     <target name="print_classpath">  
  52.         <echo message="|-- compile classpath"/>  
  53.         <echo message="|   |"/>  
  54.         <echo message="|   |-- ${echo.path.compile}"/>  
  55.     </target>  
  56.       
  57.       
  58.     <!-- 删除之前的目录结构及其文件-->  
  59.     <target name="clear" description="清理旧文件">  
  60.         <delete dir="${build.dir}" />  
  61.         <delete dir="${dist.dir}" />  
  62.         <delete file="${catalina.home}/webapps/${webapp.name}.war" />  
  63.         <delete dir="${catalina.home}/webapps/${webapp.name}" />  
  64.     </target>  
  65.   
  66.     <!--创建目录结构,用来存放生成的war、jar文件 -->  
  67.     <target name="init" depends="clear" description="创建初始化目录结构">  
  68.         <mkdir dir="${build.dir}/classes" />  
  69.         <mkdir dir="${dist.dir}" />  
  70.     </target>  
  71.   
  72.     <!-- 编译java,将编译好的class文件放入到指定文件夹-->  
  73.     <target name="compile" depends="init" description="编译java文件">  
  74.         <echo message="begin compile..." />  
  75.         <javac srcdir="${src.dir}" destdir="${build.dir}/classes"   
  76.             includeantruntime="false" nowarn="on"   
  77.             source="1.7" target="1.7" deprecation="true" debug="true"   
  78.             encoding="UTF-8" classpathref="project.classpath"   
  79.             >  
  80.             <compilerarg line="-Xlint:unchecked" />  
  81.             <!-- <classpath refid="project.classpath" /> -->  
  82.         </javac>  
  83.           
  84.         <!-- 为了保证后续build文件夹中classes文件夹内容与jenknis根据SVN代码一致-->  
  85.         <copy todir="${build.dir}/classes">  
  86.             <fileset dir="${src.dir}">  
  87.                 <include name="**/*.xml" />  
  88.                 <include name="**/*.properties" />  
  89.                 <include name="**/*.sql" />  
  90.             </fileset>  
  91.             <fileset dir="${config.dir}">  
  92.                 <include name="**/*.xml" />  
  93.                 <include name="**/*.properties" />  
  94.                 <include name="**/*.sql" />  
  95.             </fileset>  
  96.         </copy>  
  97.         <echo message="end compile..." />  
  98.     </target>  
  99.   
  100.     <!-- 打成war包, 名称默认为项目名,依赖compile目标 -->  
  101.     <target name="war" depends="compile" description="将工程打成war包">  
  102.         <echo message="begin war..." />  
  103.         <war destfile="${dist.dir}/${webapp.name}.war" basedir="${webRoot.dir}"   
  104.             webxml="${webRoot.dir}/WEB-INF/web.xml">  
  105.             <lib dir="${lib.dir}" />  
  106.             <classes dir="${build.dir}/classes" />  
  107.             <fileset dir="${webRoot.dir}">  
  108.                 <include name="***.*" />  
  109.             </fileset>  
  110.         </war>  
  111.         <echo message="end war..." />  
  112.     </target>  
  113.   
  114.     <!-- 入口 复制war包到tomcat的deploy目录,依赖war目标 -->  
  115.     <target name="deploy" depends="war" description="部署项目">  
  116.         <echo message="begin deploy..." />  
  117.         <copy file="${dist.dir}/${webapp.name}.war" todir="${catalina.home}/webapps" />  
  118.         <echo message="end deploy..." />  
  119.     </target>  
  120.   
  121. </project>  


执行顺序

(2.2.6.3)构建工具Ant(二)—实践 


注:只是针对上面的build.xml文件执行顺序来画的

   使用javacc编译存在一些无法编译的情况,这个时候可以使用eclipse的编译器jdt进行编译

   使用jdt的时,javac必须制定版本否则无法编译

  

图:项目中去编译

右击-run as -ant Build 

 (2.2.6.3)构建工具Ant(二)—实践


编译结果


[java] view plain copy
  1. <span style="font-size:18px;">Buildfile: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build.xml  
  2. clear:  
  3.    [delete] Deleting directory C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build  
  4.    [delete] Deleting directory C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\dist  
  5.    [delete] Deleting: C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\webapps\ictrcp.war  
  6.    [delete] Deleting directory C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\webapps\ictrcp  
  7. init:  
  8.     [mkdir] Created dir: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build\classes  
  9.     [mkdir] Created dir: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\dist  
  10. compile:  
  11.      [echo] begin compile...  
  12.     [javac] Compiling 1575 source files to C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build\classes  
  13.     [javac] ----------  
  14.     [javac] 1. WARNING in C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\src\main\java\ICT\tools\excel\DispatchExcelExport.java (at line 41)  
  15.     [javac]         sheet.addMergedRegion(new Region(rowNumNew, (short) (0), rowNumNew,  
  16.     [javac]                                 (short) (strs.length - 1)));  
  17.     [javac]               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
  18.     [javac] The method addMergedRegion(Region) from the type HSSFSheet is deprecated  
  19.     [javac] ----------  
  20.     [javac] 2. WARNING in C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\src\main\java\ICT\tools\excel\DispatchExcelExport.java (a  
  21.    
  22. ………………………………  
  23. \ProjectzlaqAction.java (at line 156)  
  24.     [javac]         List<LabTypeStatistics> list = JSONArray.toList(arr,LabTypeStatistics.class);  
  25.     [javac]                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
  26.     [javac] The method toList(JSONArray, Class) from the type JSONArray is deprecated  
  27.     [javac] ----------  
  28.     [javac] 182 problems (182 warnings)  
  29.      [copy] Copying 16 files to C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\build\classes  
  30.      [echo] end compile...  
  31. war:  
  32.      [echo] begin war...  
  33.       [war] Building war: C:\Program Files (x86)\Jenkins\jobs\ictrcp\workspace\dist\ictrcp.war  
  34.      [echo] end war...  
  35. deploy:  
  36.      [echo] begin deploy...  
  37.      [copy] Copying 1 file to C:\software\apache-tomcat-7.0.63-windows-x64\apache-tomcat-7.0.63\webapps  
  38.      [echo] end deploy...  
  39. BUILD SUCCESSFUL</span>  


方式二:Eclipse集成的Ant

利用Ant插件来生成构建文件

 (2.2.6.3)构建工具Ant(二)—实践

根据项目的需求自行设置,比较简单


方式三:使用命令编译打包

1、配置环境变量:

ANT_HOME=<Ant解压目 录>

Path=";%ANT_HOME%\bin"

2、命令提示符:切换到项目目录

3、编译:ant deploy


即使脱离了IDE环境,只要正确安装了Ant,配置好环境变量,即可编译打包项目

   Ant依次执行初始化,编译,测试,打包,生成API文档一系列任务,极大地提高了开发效率。即使没有友好的IDE编译环境,我们也可以轻松的将项目编译和打包,具体发布问题教给web容器就可以了。