大家都知道,“jar -cvf test.war *”这样的命令是可以为web项目打war包的,但是前段时间有这样一个问题,用命令打的包文件没什么问题,但放在tomcat中解压后,就会丢失一些文件,以为是项目文件的问题,但将原项目copy给同事,执行相同的命令,打完war包放在我的tomcat中又能正常运行,在was中也不能正常部署,就是说搞得很郁闷嘛,这难道是传说中的RP。恩,干脆整别的方法,把,在网上搜了一下,这回就遇见的Ant大师,学习了一下,将项目整了war包,放在tomcat中测试正确,在was中运行无误。现将整理的一些资料用板砖拍出来,当然了,网络是自由的,内核是别人的,外壳是小武的,旨在学习。。。
----------------build.xml-------------------
<?xml version="1.0"?>
<!--(1) default表示默认的运行目标,这个属性是必须的。
(2) basedir表示项目的基准目录。
(3) name表示项目名。
(4) description表示项目的描述。
每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有自己的构建文件。
-->
- <project name="TestProject" default="all" basedir="." description="test_project">
- <property name="src.dir" value="src" />
- <property name="classes.dir" value="WEB-INF/classes" />
- <property name="lib.dir" value="WEB-INF/lib" />
<!--用于输出打包的文件夹-->
- <property name="temp.dir" value="${java.io.tmpdir}/${ant.project.name}" />
- <property name="target.dir" value="target" />
- <!-- 定义classpath -->
- <path id="master-classpath">
- <fileset file="${lib.dir}/*.jar" />
- <pathelement path="${classes.dir}" />
- </path>
<!--
- 一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必须先编译该文件,因策可执行文件的target依赖于编译程序的target。
- Target的所有属性如下。
(1) name表示标明,这个属性是必须的。
(2) depends表示依赖的目标。
(3) if表示仅当属性设置时才执行。
(4) unless表示当属性没有设置时才执行。
(5) description表示项目的描述 - Ant的depends属性指定了target的执行顺序。Ant会依照depends属性中target出现顺序依次执行每个target。在执行之前,首先需要执行它所依赖的target。程序中的名为run的target的depends属性compile,而名为compile的target的depends属性是prepare,所以这几个target执行的顺序是prepare->compile->run。一个target只能被执行一次,即使有多个target依赖于它。如果没有if或unless属性,target总会被执行。
-->
- <target name="clean">
- <delete dir="${classes.dir}" />
- <delete dir="${temp.dir}" />
- <delete file="${target.dir}/${ant.project.name}.jar"/>
- <delete file="${target.dir}/${ant.project.name}.war"/>
- <delete dir="${target.dir}" />
- </target>
<!-- 初始化任务
(<mkdir )该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:<mkdir dir=”${class.root}”/>通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。
-->
- <target name="init" depends="clean">
- <mkdir dir="${target.dir}" />
- <mkdir dir="${temp.dir}" />
- <mkdir dir="${classes.dir}" />
- </target>
<!-- 编译 -->
- <target name="compile" depends="init" description="compile the source files">
- <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="true" encoding="GB2312">
- <classpath refid="master-classpath" />
- </javac>
- <copy todir="${classes.dir}" overwrite="true">
- <fileset dir="${src.dir}">
- <include name="**/*.xml" />
- <include name="**/*.properties" />
- </fileset>
- </copy>
- </target>
<!--打jar包-->
- <target name="jar" depends="compile">
- <jar jarfile="${target.dir}/${ant.project.name}.jar">
- <fileset dir="${classes.dir}">
- <include name="**/*" />
- </fileset>
- </jar>
- </target>
- <target name="preWar" depends="jar">
- <copy todir="${temp.dir}/WEB-INF/lib" overwrite="true">
- <fileset dir="${target.dir}">
- <include name="${ant.project.name}.jar"/>
- </fileset>
- </copy>
- <copy todir="${temp.dir}" overwrite="true">
- <fileset dir="${basedir}">
- <include name="${lib.dir}/*.jar" />
- <include name="index.html" />
- <include name="page/**/*.*" />
- <include name="WEB-INF/*.xml" />
- </fileset>
- </copy>
- </target>
<!--打war包-->
- <target name="war" depends="preWar">
- <jar jarfile="${target.dir}/${ant.project.name}.war">
- <fileset dir="${temp.dir}">
- <include name="**/*.*"/>
- </fileset>
- </jar>
- </target>
- <target name="all" depends="war">
- <delete dir="${temp.dir}"/>
- </target>
- </project>
下次再整,后续。。。