前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >web项目ant打包完整案例

web项目ant打包完整案例

作者头像
小小科
发布2018-05-02 18:03:33
1.8K0
发布2018-05-02 18:03:33
举报
文章被收录于专栏:北京马哥教育北京马哥教育

前两周做的web项目要部署到服务器上去,为了后续升级部署方便,决定采用Ant进行(开发用的myeclipse 8.5),ant打包测试也是在myeclipse上进行,build.xml测试完成后地通过本地配置的ant进行手工打包:ant -buildfile build.xml.下面将相关过程简单总结如下:

(1)运用myeclipse对web项目打war包,观察其他结构和组成,方便ant打包build.xml整理

图1 web项目s2si结构

图2 myeclipse打出war包总体结构

图3.myeclipse打出war包WEB-INFO目录结构

图4.myeclipse打出war包WEB-INFO\classes目录结构

(2)build.xml内容整理:

(3)本地安装Ant并设置ANT_HOME和path:

(4)运用本地ant打包:

---->>打出war包查看:

--->>

(5)问题及解决归纳总结:

A1.build.xml注意设置basedir:

<project name="s2si" default="dist" basedir=".">

--->>这里basedir="."意思是基础目录是与build.xml同级目录,比如说src或 s2si,后续新建目录都是在此基础上进行,为了方便打包,可以根据自己需要放置 build.xml,比如我就放在了工程s2si根目录下.

A2.build.xml注意设置<war>命令中的basedir:

<war destfile="${build.dir}/${ant.project.name}.war" basedir="${build.dir}" webxml="${build.web.dir}/web.xml"/>

打包是将编译好的class文件和相关配置文件集体打包,所以应该选择 "${build.dir}",开始自己犯错basedir="${basedir}",直接导致打出的war包下 面很乱,即使打包过程没出错,但部署到tomcat上就会报一大堆问题.

A3.打包时需要注意编码和jdk版本:

<javac destdir="${build.web.class.dir}" source="1.6" target="1.6" debug="on" deprecation="false" optimize="false" failonerror="true" srcdir="${src.dir}" > <compilerarg line="-encoding UTF-8"/> <classpath refid="project.classpath" ></classpath> </javac>

--->>字符编码要和web项目编码一致,jdk版本要和本地安装版本一致.如果不致,myeclipse中运行build.xml打包编译不过,本地手工ant打包会报如下错:

eclipse 出现警告: [options] 未与 -source 1.6 一起设置引导类路径.

A4.build.xml拷贝页面文件和配置文件时注意excludes使用:

<copy todir="${build.web.class.dir}">

<!-- 复制源代码目录中所有的非java文件 -->

<fileset dir="${src.dir}" excludes="**/*.java">

</fileset>

</copy>

<copy todir="${build.dir}">

<!-- WebRoot目录中所有的非java文件 -->

<fileset dir="${webRoot.dir}" excludes="**/*.class" >

</fileset> </copy>

--->>说明:

${src.dir}=s2si/src

${webRoot.dir}=s2si/WebRoot

这里需要注意的是要排除指定目录中某些规则的文件必须用:excludes="**/*.java"或excludes="**/*.class",**/*.*这是ant里的规则,不是指两级目录后的规则筛选.

--->> classpath备忘:

<classpath refid="project.classpath" ></classpath>

这里用classpath标签,指定路径时用classpathref还是用path还是用refid有不同的情况,这里用的是refid,注意根据自己情况而定. ---->> ant打包核心build.xml内容如下: <?xml version="1.0" encoding="UTF-8"?> <project name="s2si" default="dist" basedir="."> <property name="build.dir" value="build" description="输出目录"/> <property name="build.web.dir" value="${build.dir}/WEB-INF" description="web配置输出目录"/> <property name="build.web.class.dir" value="${build.web.dir}/classes" description="web类输出目录"/> <property name="build.web.lib.dir" value="${build.web.dir}/lib" description="web引用jar输出目录"/> <property name="src.dir" value="src" description="源代码目录"/> <property name="webRoot.dir" value="${basedir}/WebRoot" /> <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" /> <property name="encoding" value="utf-8" description="文件编码"/> <path id="project.classpath"> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset> <pathelement path="${basedir}/WebRoot/WEB-INF/lib"/> </path> <target name="init"> <delete dir="${build.dir}"/> <mkdir dir="${build.dir}"/> <mkdir dir="${build.web.dir}"/> <mkdir dir="${build.web.lib.dir}"/> <mkdir dir="${build.web.class.dir}"/> </target> <target name="compile" depends="init"> <javac destdir="${build.web.class.dir}" source="1.6" target="1.6" debug="on" deprecation="false" optimize="false" failonerror="true" srcdir="${src.dir}" > <compilerarg line="-encoding UTF-8"/> <classpath refid="project.classpath" ></classpath> </javac> <copy todir="${build.web.class.dir}"> <!-- 复制源代码目录中所有的非java文件 --> <fileset dir="${src.dir}" excludes="**/*.java"> </fileset> </copy> <copy todir="${build.dir}"> <!-- WebRoot目录中所有的非java文件 --> <fileset dir="${webRoot.dir}" excludes="**/*.class" > </fileset> </copy> </target> <target name="main" depends="init,compile" /> <target name="dist" depends="main" description="将工程打成war包"> <war destfile="${build.dir}/${ant.project.name}.war" basedir="${build.dir}" webxml="${build.web.dir}/web.xml"/> </target> </project> --->>关于ant基础知识和使用指南,请参见: http://blog.itpub.net/29119536/viewspace-1203386/ --->>web项目打包指南请参见: http://blog.itpub.net/29119536/viewspace-1204798/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档