build.xml的配置

来源:互联网 发布:windows文件共享协议 编辑:程序博客网 时间:2024/05/21 17:41

 使用ant发布war包build.xml的配置

<project basedir="." default="usage" name="myceaas">  
 
 
 <target name="init">  
 
 
 
  <property name="Name" value="myceaas" />  
  <property name="name" value="myceaas" />  
  <property name="version" value="0.2" />  
  <property name="year" value="2006" />  
 
 
 
  <echo message="----------- ${Name} ${version} [${year}] ------------" />  
 
 
 
  <property name="debug" value="off" />  
  <property name="optimize" value="on" />  
  <property name="deprecation" value="on" />  
 
 
 
  <!--<property name="mycedatasycn.location" value="D:/project/myce/mycedatasycn" />-->  
 
 
 
<!--   java源文件路径 -->  
 
  <property name="src.dir" value="${basedir}/src" />  
 
 
 
<!--   jar包路径 -->  
  <property name="lib.dir" value="${basedir}/myceaas/WEB-INF/lib" />  
 
 
 
<!--   webapp路径 -->  
  <property name="webapp.dir" value="${basedir}/myceaas" />  
  <property name="packages" value="com.ce.myceaas.*" />  
 
 
 
<!--   准备源文件路径 -->  
  <property name="build.src" value="${basedir}/AntBuild/build" />  
 
 
 
<!--   编译源文件路径 -->  
  <property name="build.dest" value="${basedir}/AntBuild/bin" />  
 
 
 
<!--   准备webapp文件路径 -->  
  <property name="buildwar.dest" value="${basedir}/AntBuild/warsrc" />  
 
 
 
<!--   准备javadoc文件路径 -->  
  <property name="build.javadocs" value="${basedir}/AntBuild/doc" />  
 
 
 
<!--   打包jar文件路径 -->  
  <property name="jar.dest" value="${basedir}/AntBuild/jar" />  
 
 
 
<!--   打包war文件路径 -->  
  <property name="war.dest" value="${basedir}/AntBuild/war" />  
    
  <!--   resin-home路径 -->  
  <property name="resin.home" value="C:/resin-pro-3.0.17"/>  
 
 
 
<!--   tomcat-home路径 -->  
  <property name="tomcat.home" value="C:/tomcat5.5.12"/>    
  <property name="j2eelib.dir" value="C:/Program Files/MyEclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_3.9.210/data/libraryset/1.4" />  
 
 
 
<!--   classpath -->  
  <path id="classpath">  
     
   <fileset dir="${j2eelib.dir}">  
    <include name="**/*.jar"/>  
   </fileset>  
   <fileset dir="${lib.dir}">  
    <include name="**/*.jar"/>  
   </fileset>  
   <!--<pathelement location="lib/"/>-->  
  </path>  
 
 
 
  <filter token="year" value="${year}" />  
  <filter token="version" value="${version}" />  
  <filter token="date" value="${TODAY}" />  
  <filter token="log" value="true" />  
  <filter token="verbose" value="true" />  
 
 
 
 </target>  
 
 
 
  <!-- =================================================================== -->  
 <!-- Help on usage -->  
 <!-- =================================================================== -->  
 <target name="usage" depends="init">  
  <echo message="${Name} Build file" />  
  <echo message="-------------------------------------------------------------" />  
  <echo message="" />  
  <echo message=" available targets are:" />  
  <echo message="" />  
  <echo message=" jar --> generates the ${name}.jar file" />  
  <echo message=" build --> compiles the source code" />  
  <echo message=" javadoc --> generates the API documentation" />  
  <echo message=" clean --> cleans up the directory" />  
  <echo message="" />  
  <echo message=" Please rename build.properties.default to build.properties" />  
  <echo message=" and edit build.properties to specify JSDK 2.3 classpath." />  
  <echo message="" />  
  <echo message=" See the comments inside the build.xml file for more details." />  
  <echo message="-------------------------------------------------------------" />  
  <echo message="" />  
  <echo message="" />  
 </target>  
 
 
 
 <!-- =================================================================== -->  
 <!-- 准备源文件-->  
 <!-- =================================================================== -->  
 <target name="prepare-src" depends="init">  
  <!-- create directories -->  
  <mkdir dir="${build.src}" />  
  <mkdir dir="${build.dest}" />  
  <mkdir dir="${jar.dest}" />  
  <mkdir dir="${war.dest}" />  
  <mkdir dir="${buildwar.dest}" />  
    
    
  <!-- copy src files -->  
  <copy todir="${build.src}">  
   <fileset dir="${src.dir}" />  
  </copy>  
  <copy todir="${buildwar.dest}">  
   <fileset dir="${webapp.dir}" />  
  </copy>  
   
 </target>  
 
 
 
 <!-- =================================================================== -->  
 <!-- 编译源文件-->  
 <!-- =================================================================== -->  
 <target name="build" depends="prepare-src">  
  <javac srcdir="${build.src}" destdir="${buildwar.dest}/WEB-INF/classes" debug="${debug}" optimize="${optimize}">  
   <classpath refid="classpath" />  
  </javac>  
  <copy todir="${buildwar.dest}/WEB-INF/classes">  
   <fileset dir="${build.src}" >  
    <include name="**/*.xml"/>  
   </fileset>  
  </copy>  
 </target>  
 
 
 
 <!-- =================================================================== -->  
 <!-- 打war包-->  
 <!-- =================================================================== -->  
 
 <target name="myceaas.war" depends="build">  
  <war warfile="${war.dest}/myceaas.war" webxml="${buildwar.dest}/WEB-INF/web.xml">  
   <lib dir="${buildwar.dest}/WEB-INF/lib"/>  
   <classes dir = "${buildwar.dest}/WEB-INF/classes"/>  
   <fileset dir="${buildwar.dest}">  
   </fileset>  
  </war>  
   
 </target>  
 
 
 
 <!-- =================================================================== -->  
 <!-- 发布到本的resin和tomcat-->  
 <!-- =================================================================== -->  
 
 <target name="publish" depends="myceaas.war,clean">  
  <copy todir="${resin.home}/webapps">  
   <fileset dir="${war.dest}" >  
    <include name="**/*.war"/>  
   </fileset>  
  </copy>  
  <copy todir="${tomcat.home}/webapps">  
   <fileset dir="${war.dest}" >  
    <include name="**/*.war"/>  
   </fileset>  
  </copy>  
    
 </target>  
 <!--  
 <target name="SyncMain">  
         <java classname="com.ce.synchronization.main.SyncMain" failonerror="true" fork="yes">  
             <classpath refid="classpath"/>  
         </java>  
 </target>  
 -->  
 <!-- =================================================================== -->  
 <!-- 产生javadoc api 文档-->  
 <!-- =================================================================== -->  
 <target name="javadoc" depends="build">  
  <mkdir dir="${build.javadocs}" />  
  <javadoc packagenames="${packages}" sourcepath="${build.src}" destdir="${build.javadocs}" author="true" version="true" use="true" splitindex="true" windowtitle="${Name} API" doctitle="${Name}">  
   <classpath refid="classpath" />  
  </javadoc>  
 </target>   
 <!-- =================================================================== -->  
 <!-- 清除临时文件-->  
 <!-- =================================================================== -->  
 <target name="clean" depends="init">  
  <delete dir="${build.src}"/>  
  <delete dir="${build.dest}/org"/>  
  <delete dir="${build.dest}/com"/>  
  <delete dir="${buildwar.dest}"/>  
  <delete>  
   <fileset dir="${build.dest}" includes="**/*.class"/>  
  </delete>  
 </target>  
 
 
 
</project> 

(2)
.控制台在firsttest目录,输入ant后回车就打包完成了!
  注:输入ant回车自动执行init,compile,dist命令。要想执行clean命令,输入ant clean即可。

<?xml version="1.0" encoding="UTF-8"?>
                                    
<project name="ant_firsttest" default="dist" basedir=".">
  <description>ant firsttest!</description>
                                       
  <!-- set global properties for this build -->
  <!--设定变量,之后用。location为文件夹路径-->
  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist" location="dist"/>
  <property name="web" location="web"/>
          
  <!--设置properties文件位置.这里没用到。-->
  <!--<property file="nbproject/project.properties"/>-->

  <!--初始化命令-->
  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
               
    <!--mkdir是建立文件夹,${build}即刚才设定的变量。这几行都在干这事。-->
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${build}/WEB-INF/lib"/>
    <mkdir dir="${build}/WEB-INF/classes"/>
                                         
    <mkdir dir="${build}/WEB-INF/classes/javafile/package1"/>
    <mkdir dir="${build}/WEB-INF/classes/javafile/package2"/>
                                        
  </target>

  <!--编译-->
  <target name="compile" depends="init"
        description="compile the source " >
                                           
    <!-- Compile the java code from ${src} into ${build} -->
    <!--javac标签用来设置编译程序的参数,srcdir为java文件路径,destdir为编译后class文件的保存路径。-->
    <javac srcdir="${src}/javafile/package1" destdir="${build}/WEB-INF/classes/javafile/package1"/>
    <javac srcdir="${src}/javafile/package2" destdir="${build}/WEB-INF/classes/javafile/package2"/>
    <!--如果路径下还有别的文件需要一起打包,用copy 命令。-->
    <copy file="${src}/hello_ant.xml" tofile="${build}/WEB-INF/classes/hello_ant.xml" />
                                       
  </target>
           
  <!--编译后就要打包了。-->
  <target name="dist" depends="compile"
        description="generate the distribution" >
    <!-- Create the distribution directory -->
    <mkdir dir="${dist}"/>
                     
       <!--像jsp,jar这些直接用不用编译的文件,直接用copy命令。-->
    <copy file="${web}/image/a.gif" tofile="${build}/image/a.gif" />
    <copy file="${web}/WEB-INF/web.xml" tofile="${build}/WEB-INF/web.xml" />
    <copy file="${web}/WEB-INF/lib/a.jar" tofile="${build}/WEB-INF/lib/a.jar" />
    <copy file="${web}/index.jsp" tofile="${build}/index.jsp" />
           
    <!--最后用jar命令打成jar/war文件,文件名和后缀随便起。basedir为欲打包的原文件路经-->
    <jar jarfile="${dist}/ant_firsttest.jar" basedir="${build}"/>
  </target>
   
  <!--删除-->
  <target name="clean"
        description="clean up" >
    <!--设定删除命令要删的路径。-->
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>
</project>
 

2.用Ant编译Java Web程序

Head First的Servlets&JSP中不提倡刚学写Servlet、JSP时就使用Eclipse、NetBeans那样的集成开发环境,最好在命令行编译。我倒是一直照做的,另外Linux上的命令行用起来也确实很方便。最近接触了一下struts,这才发现在命令行下一个一个地编译文件实在是太痛苦了,但又不想用Eclipse,毕竟还没有工作,还是想尝些新鲜的。所以就想到了Ant。上网看了一堆文章,现学现用,写了一个令自己比较满意的 build.xml。

Ant这个东西很强大。

先看一下项目的目录结构:

source目录里放Java源程序,classes目录里放编译好的class文件。这两个目录里的文件都要按包结构组织好。当然,classes目录也可以不必事先建立,这可以交给Ant去做。以下是我写的build.xml,放在Hello目录下:


 <?xml version="1.0" encoding="UTF-8" ?>
<project name="hello" default="compile" basedir=".">
    <property name="tomcat.lib" value="/home/albert/Applications/apache-tomcat-5.5.26/common/lib" />
    <property name="dest.dir" value="WEB-INF/classes" />
    <property name="src.dir" value="source" />
    <target name="init">
        <mkdir dir="${dest.dir}" />
    </target>
    <target name="compile" depends="init">
        <javac srcdir="${src.dir}" destdir="${dest.dir}">
            <classpath>
                <fileset dir="${tomcat.lib}">
                    <include name="*.jar" />
                </fileset>
                <fileset dir="WEB-INF/lib">
                    <include name="*.jar" />
                </fileset>
            </classpath>
        </javac>
    </target>
    <target name="clean">
        <delete dir="${dest.dir}" />
    </target>
</project>
 

在Ant的构建文件build.xml中,最重要的是target(目标)。一个build.xml往往包含了多个target,定义了一个软件项目的构建过程以及每步之间的依赖关系。例如对于这个项目来说,“编译”必须要在创建完classes目录后才能进行。此外,在进行编译时,ant还会比较源文件和对应的class文件的时间戳,以此来判断源文件在上次编译后是否被更新,是否需要重新编译。知道了这些,就可以大体说下各项的含义了。

最外层的project元素定义了项目的名称(name),默认构建目标(default)和构建的基本目录(basedir,当前目录 “.”)。basedir即设定文件中的相对路径是相对于谁而言的。接下来有一些property元素,你可以把它们当成一些变量的定义,这是为了接下来引用的方便。

然后定义了三个target元素。第一个target的名字是init。名字的作用是:如果你想执行某个target的任务,只需在命令行下执行 ant 即可。如果省略了,ant会执行在project元素中定义的默认目标。在里面用mkdir定义了一个任务,即创建classes目录。这里引用了刚才定义的property,注意引用property的写法:”${dest.dir}”。

第二个是compile目标。depends=”init”说明它依赖于init。即当Ant发现init目录没有完成时(classes目录还没有创建时),Ant会先执行init目标。compile目标里面用javac元素描述了编译任务。srcdir和destdir分别指定了源文件的目录和编译后class文件的目录。尽管因为包结构的原因,source目录下还有子目录,但Ant会把source目录下的所有Java源文件进行编译,并且在classes目录下建立相应的包结构目录,把所有的class文件放在正确的位置上。所有这一切都只是用这两个参数来描述的。再往里是 classpath元素,用来设定编译时的classpath,以便引用servlet-api.jar和struts库里的类。我偷了个懶,把所有的 jar文件都包含进来了。用的是fileset,指定好目录和要包含的文件名(可以有通配符)就行了。

最后一个target clean是清除编译生成的文件,用delete元素来完成。这样当在命令行下执行ant clean后,classes目录就被删除了。

把这个build.xml放在项目目录Hello中,以后只要在Hello目录下执行ant,就会自动把所有需要编译的文件编译好后放在classes目录里了,非常方便。


 

原创粉丝点击