web工程使用ant打war包
介绍
编写了一个基于ssi的web工程,现在想把它打成war包部署到服务器上面去。打算使用ant在本地打包,然后war包扔到服务器的tomcat下面去
需求
1.使用ant把web工程打成war包
步骤
1.编写build.xml文件:
<project name="testProject" default="war" basedir=".">
<property name="classes.dir" value="build/classes"/>
<property name="build.dir" value="build"/>
<property name="lib.dir" value="lib/"/>
<!--项目依赖的第三方jar包路径-->
<path id="lib_classpath">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="clean" description="删除build目录">
<delete dir="${build.dir}"/>
<mkdir dir="${build.dir}" />
<mkdir dir="${classes.dir}" />
</target>
<target name="compile" depends="clean" description="建立${classes}路径,并编译class文件到${classes}路径下">
<!--执行编译-->
<javac srcdir="src" destdir="${classes.dir}" encoding="UTF-8"> <!--工程使用的是urf-8格式-->
<classpath refid="lib_classpath"/> <!--引入项目依赖的第三方jar包-->
</javac>
</target>
<target name="prepare" description="将Struts、Spring、Hibernate、properties等配置文件拷贝到${classes}路径下">
<!--拷贝所有的xml配置文件-->
<copy todir="${classes.dir}">
<fileset dir="src">
<include name="**/*.xml"/>
</fileset>
</copy>
<!--拷贝所有的属性文件-->
<copy todir="${classes.dir}">
<fileset dir="src">
<include name="**/*.properties"/>
</fileset>
</copy>
</target>
<target name="war" depends="compile,prepare" description="打包war">
<war destfile="${build.dir}/testProject.war" webxml="WebRoot/WEB-INF/web.xml">
<!--拷贝WebRoot下除了Web-INF和META-INF的两个文件夹-->
<fileset dir="WebRoot" />
<!--拷贝lib目录下的jar包-->
<lib dir="${lib.dir}"/>
<!--拷贝${classes}下的class文件-->
<classes dir="${classes.dir}"/>
</war>
</target>
</project>
关于**/*:xml:遍历目录(包括子目录),检索出xml文件。
3.因为web工程使用到了tomcat目录下的jar包,如果你的环境变量里面没有把tomcat的jar包目录配置上去,打包会报错。则可以手工在ant打包时添加tomcat下面的jar包上去
4.点击run开始打包,出现如下,表示打包成功
问题
1.乱码问题:如果工程里面的java文件有乱码,比如代码写完,带中文,使用了gbk32的格式,如果突然转成其他格式,比如常用的UTF-8,本地编译的时候不会报错,使用ant打包则会警告甚至报错:
xx.java:92: 警告:编码 GBK 的不可映射字符
request.setAttribute("msgInfo", "绯荤粺鍑虹幇寮傚父锛岃
閲嶈瘯锛?);
^
xx.java:92: 非法的表达式开始
request.setAttribute("msgInfo", "绯荤粺鍑虹幇寮傚父锛岃
閲嶈瘯锛?);
^
xx.java:92: 需要 ';'
request.setAttribute("msgInfo", "绯荤粺鍑虹幇寮傚父锛岃
閲嶈瘯锛?);
^
xx.java:92: 未结束的字符串字面值
request.setAttribute("msgInfo", "绯荤粺鍑虹幇寮傚父锛岃
閲嶈瘯锛?);
閲嶈瘯锛?);
xx.java:92: 非法的表达式开始
閲嶈瘯锛?);
xx.java:92: 需要 ';'
閲嶈瘯锛?);
xx.java:92: 未结束的字符串字面值
閲嶈瘯锛?);
如果遇到这些问题,比较笨的办法就是先转成正确的字符格式,copy代码后,然后把java类改成想要的字符格式,把copy的代码粘贴上去即可。
2.工程内需要连接数据库查询数据,war包部署后,发现报错:Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
1.首先应检查项目的lib目录下是否有mysql的驱动包
2.应该将mysql的驱动包放到common目录的lib文件夹下
即 C:\Program Files\Tomcat 5.5\common\lib然后重启服务器即可解决问题
即 C:\Program Files\Tomcat 5.5\common\lib然后重启服务器即可解决问题