您的位置:首页 > 运维架构 > Tomcat

Ant 构建工具(从SVN下载项目 ,编译,到tomcat下运行项目)

2010-12-19 23:17 555 查看
<?xml version="1.0" encoding="UTF-8" ?>
- <project name="pro_v5" default="deploy" basedir=".">
- <!--  svn 帐号、密码、链接
-->
<property name="svn.username" value="test" />
<property name="svn.password" value="p@ssmord" />
<property name="svn.url" value="svn://192.168.1.250:9001/tb06/trunk/" />
- <!--  项目结构目录名
-->
<property name="build" value="build" />
<property name="dest" value="${build}/classes" />
<property name="dist" value="${build}/dist" />
<property name="project.dir" value="${build}/Lifeix_V5" />
<property name="project.name" value="Lifeix_V5" />
<property name="classes.home" value="${project.dir}/WebRoot/WEB-INF/classes" />
- <!--  tomcat、包路径
-->
<property name="tomcat.dir" value="E:/Tomcat6.0" />
<property name="svnant.dir" value="E:/svnant-1.3.0/svnant-1.3.0/lib" />
<property name="junit.jar" value="E:/work/MyEclipse_6.5/eclipse/plugins/org.junit4_4.3.1/" />
<property name="javaee.dir" value="E:/work/MyEclipse_6.5/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806/data/libraryset/EE_5/" />
<echo>初始化:删除、创建文件夹</echo>
- <target name="init" description="createDir">
<delete dir="${project.dir}" />
<delete dir="${dest}" />
<delete dir="${build}" />
<delete dir="${dest}" />
<delete dir="${dist}" />
<mkdir dir="${dist}" />
<mkdir dir="${build}" />
<mkdir dir="${dest}" />
</target>
- <!--  svn插件
-->
- <taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask">
- <classpath>
<fileset dir="${svnant.dir}" includes="*.jar" />
<filelist files="${project.dir}/*" />
</classpath>
</taskdef>
<echo>导出目录结构</echo>
- <target name="export" depends="init">
- <!--  这里将javahl设为true是为了使用纯java实现的svn访问中间层,而不是使用svn的二进制命令行客户端
-->
- <!--  这里就要求svnant.jar在系统classpath中
-->
- <svn javahl="true" username="${svn.username}" password="${svn.password}" failonerror="false">
<export srcUrl="${svn.url}" revision="HEAD" destPath="${project.dir}" />
</svn>
</target>
<echo>引入jar 包</echo>
- <path id="project.classpath">
- <!--  junit包
-->
<fileset dir="${junit.jar}" includes="junit.jar" />
- <!--  org.apache.catalina  包
-->
<fileset dir="${tomcat.dir}/lib/" includes="catalina.jar" />
- <!--  引入项目中的jar包
-->
<fileset dir="${project.dir}/WebRoot/WEB-INF/lib/" includes="*.jar" />
- <!--  Java EE 5 Libraries 软件包(javaee、jsf-impl、jsf-api、jstl-1.2.jar)
-->
<fileset dir="${javaee.dir}" includes="*.jar" />
</path>
- <path id="classpath">
- <!--  junit包
-->
<fileset dir="${project.dir}" />
<fileset dir="${junit.jar}" includes="junit.jar" />
</path>
<echo>编译</echo>
- <!--  excludes 不包含 ,fork="true" 设置memorymaximumsize启用
-->
- <target name="compile" depends="export" description="Compile Java code">
- <javac srcdir="${project.dir}" destdir="${dest}" encoding="UTF-8" classpathref="project.classpath" excludes="WebRoot/**/*" memorymaximumsize="750M" fork="true" includeantruntime="false">
<compilerarg value="-Xlint:deprecation" />
<compilerarg value="-Xlint:unchecked" />
</javac>
</target>
<echo>编译完成</echo>
<echo>打war包</echo>
- <target name="war" depends="compile" description="Build the web application archive">
<echo>copy web下的配置文件到WEB-INF下的classes文件下</echo>
- <!--  拷贝web下的配置文件
-->
- <copy todir="${dest}" preservelastmodified="true">
- <fileset dir="${project.dir}/web">
<include name="**/*.xml" />
<include name="**/*.properties" />
<include name="**/*.txt" />
</fileset>
</copy>
- <copy todir="${project.dir}/WebRoot/WEB-INF/lib" preservelastmodified="true">
- <!--  拷贝Java EE 5 Libraries 软件包(javaee、jsf-impl、jsf-api、jstl-1.2.jar)
-->
<fileset dir="${javaee.dir}" includes="*.jar" />
</copy>
- <war warfile="${dist}/${project.name}.war" basedir="${dist}" webxml="${project.dir}/WebRoot/WEB-INF/web.xml">
- <!--  拷贝WebRoot下除了WEB-INF和META-INF的两个文件夹
-->
<fileset dir="${project.dir}/WebRoot" includes="**/" />
- <!--  拷贝lib目录下的jar包
-->
<lib dir="${project.dir}/WebRoot/WEB-INF/lib" />
- <!--  拷贝build/classes下的class文件
-->
<classes dir="${dest}" />
</war>
</target>
<echo>部署应用程序到tomcat</echo>
- <target name="deploy" depends="war" description="Deploy to local Tomcat instance">
<copy file="${dist}/${project.name}.war" todir="${tomcat.dir}/webapps" />
</target>
</project>


4. 拷贝单个的文件:
〈copy tofile="old.txt" file="new.txt" /〉就这么简单就行了。
当然也可以写成
<copy tofile="${basedir}/new/new.txt">
<fileset dir="${basedir}/old" includes="old.txt" />
</copy>
这里includes就只能写一个文件,不能写上多个文件,因为不能将多个文件复制到一个文件中去,所以这样麻烦的写法是没有意义的。

复制肯定还要涉及到同名覆盖的问题,ant在copy类的API中说明:Files are only copied if the source file is newer than the destination file,这里的newer是指文件的修改时间,即使你在修改时文件内容没有任何变化,只是导致修改时间变了,ant同样会覆盖同名文件,也就是说,ant不会检查文件内容。

对于是复制目录的情况,由于目录没有修改时间,ant还是通过检查目录内文件的修改时间来决定是否覆盖的,若目录内某文件修改时间有变化,则会覆盖这个文件,而不是整个目录。

如果要强行覆盖,<copy/>有个overwrite属性,默认为false,改成true就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: