本篇主要写的是用ant来打包编译一个动态的web项目,该项目是我以前写的一个测试项目,用到的框架是struts2+hibernate,前台界面很少就三个,后台的代码也不多,主要的就是回顾一下以前学过的struts2,然后练习一下刚接触的hibernate和ant。项目的结构如下:
关于struts2和hibernate的环境搭建这里就不说了,主要说的是用ant打包编译该项目。本人是第一次接触ant这个东西,用了将近一下午的时间才把这个项目给打包出来,说出来真是。。。。。。
下边的是build.xml源码:
<?xml version="1.0" encoding="UTF-8"?>
<project default="movewar" basedir=".">
<!-- 路径信息 -->
<property name="classes" value="build/classes"/>
<property name="build" value="build"/>
<property name="lib" value="WebContent/WEB-INF/lib"/>
<property name="tomcathome" value="D:/workspace/tomcat6"></property>
<path id="weblib">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
</path>
<!-- 删除build文件夹 -->
<target name="del" description="init target">
<delete dir="${build}"></delete>
<echo>删除build文件夹</echo>
</target>
<!-- 移动配置文件 -->
<target name="movepropertity" depends="del" description="">
<!-- 将配置文件移动到war包目录下 -->
<copy todir="${build}/classes">
<fileset dir="src" id="propertityfile">
<include name="*.xml"/>
<include name="*.properties"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
<!-- 将pojo中的hibernate配置文件移动到war包对应目录下 -->
<copy todir="${build}/classes/com/cpw/pojo">
<fileset dir="src/com/cpw/pojo" id="pojofile">
<include name="*.xml"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<!-- 编译src文件夹下的java文件到classes文件夹下 -->
<target name="compile" depends="movepropertity" description="">
<mkdir dir="${build}/classes"/>
<javac srcdir="src" destdir="${classes}" encoding="UTF-8" includeantruntime="on">
<classpath refid="weblib"></classpath>
</javac>
<echo>编译src文件夹下的java文件到classes文件夹下</echo>
</target>
<!-- 打war包 -->
<target name="war" depends="compile" description="">
<war destfile="${build}/test01.war" webxml="WebContent/WEB-INF/web.xml">
<lib dir="${lib}"/>
<classes dir="${classes}"/>
<fileset dir="WebContent"/>
</war>
<echo>打war包</echo>
</target>
<!-- 移动war包 -->
<target name="movewar" depends="war" description="movewar target">
<!-- 删除tomcat下的项目文件夹和war包 -->
<delete file="${tomcathome}/webapps/test01.war"/>
<delete dir="${tomcathome}/webapps/test01"/>
<!-- 移动war包 -->
<copy todir="${tomcathome}/webapps">
<fileset file="${build}/test01.war"></fileset>
</copy>
<!-- 删除原有编译的war包 -->
<delete file="${build}/test01.war"/>
<echo>移动war包</echo>
</target>
</project>
对应的代码都有相对应的注释,我就说一下项目打包中遇到的问题。
1、编码问题:
xml文件写完后第一次运行就遇到了编码问题,警告:编码 GBK 的不可映射字符!我的全局编码格式是UTF-8的,不可能出现gbk编码,我就上网查了查解决方案,后来解决的方法是在<javac></javac>中添加了编码声明
encoding="UTF-8"
该问题解决!
2、jar包不存在:
编码问题解决后接着打包,又提示“软件包 XXXX 不存在”,上网查询后发现需要在<javac></javac>中添加<classpath>标签,并指明jar包的位置。于是我就用了一个<path>标签声明jar包位置,并在<javac>中添加<classpath>标签
<path id="weblib">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
</path>
<javac srcdir="src" destdir="${classes}" encoding="UTF-8" includeantruntime="on">
<classpath refid="weblib"></classpath>
</javac>
然后问题就解决了。
3、其他问题
后来打包编译没问题了,不过将war包拷贝到tomcat下后,运行的时候出问题了。原来是struts2和hibernate的配置文件没有添加到war包中,
<!-- 将配置文件移动到war包目录下 -->
<copy todir="${build}/classes">
<fileset dir="src" id="propertityfile">
<include name="*.xml"/>
<include name="*.properties"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
这段代码是将struts2和hibernate的配置文件复制到war包的目录下,后来又发现hibernate的pojo配置文件也忘了复制过去了,所以写了下边的代码
<!-- 将pojo中的hibernate配置文件移动到war包对应目录下 -->
<copy todir="${build}/classes/com/cpw/pojo">
<fileset dir="src/com/cpw/pojo" id="pojofile">
<include name="*.xml"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
这样一来运行就没问题了。
经过这个项目的配置运行,对ant的使用也有了大概的了解和认识,在这里贴出来和大家一起学习学习!