大家都知道,“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表示项目的描述。  

 每个构建文件都对应于一个项目,但是大型项目经常包含大量的子项目,每一个子项目都可以有自己的构建文件。

 
        -->1.  <project name="TestProject" default="all" basedir="."  description="test_project">
2.   
3.      <property name="src.dir"       value="src" />
4.      <property name="classes.dir"   value="WEB-INF/classes" />
5.      <property name="lib.dir"       value="WEB-INF/lib" />
6.   
<!--用于输出打包的文件夹-->
1.      <property name="temp.dir"      value="${java.io.tmpdir}/${ant.project.name}" />
2.      <property name="target.dir"    value="target" />
3.   
4. <!-- 定义classpath -->
5.      <path id="master-classpath">
6.          <fileset file="${lib.dir}/*.jar" />
7.          <pathelement path="${classes.dir}" />
8.      </path>   
9.   
<!-- 
1. 一个项目标签下可以有一个或多个target标签。一个target标签可以依赖其他的target标签。例如,有一个target用于编译程序,另一个target用于声称可执行文件。在生成可执行文件之前必须先编译该文件,因策可执行文件的target依赖于编译程序的target。
2. Target的所有属性如下。 
(1) name表示标明,这个属性是必须的。 
(2) depends表示依赖的目标。 
(3) if表示仅当属性设置时才执行。 
(4) unless表示当属性没有设置时才执行。 
(5) description表示项目的描述3. 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总会被执行。
-->
1.      <target name="clean">
2.          <delete dir="${classes.dir}" />
3.          <delete dir="${temp.dir}" />
4.          <delete file="${target.dir}/${ant.project.name}.jar"/>
5.          <delete file="${target.dir}/${ant.project.name}.war"/>
6.          <delete dir="${target.dir}" />
7.      </target>   
8.   
<!-- 初始化任务 
(<mkdir )该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名,其代码如下:<mkdir dir=”${class.root}”/>通过以上代码就创建了一个目录,这个目录已经被前面的property标签所指定。 
-->
1.      <target name="init" depends="clean">
2.          <mkdir dir="${target.dir}" />
3.          <mkdir dir="${temp.dir}" />
4.          <mkdir dir="${classes.dir}" />
5.      </target>   
6.   
<!-- 编译 -->
1.      <target name="compile" depends="init" description="compile the source files">
2.          <javac srcdir="${src.dir}" destdir="${classes.dir}"  debug="true" encoding="GB2312">
3.              <classpath refid="master-classpath" />
4.          </javac>   
5.          <copy todir="${classes.dir}" overwrite="true">
6.              <fileset dir="${src.dir}">
7.                  <include name="**/*.xml" />
8.                  <include name="**/*.properties" />
9.              </fileset>   
10.          </copy>   
11.      </target>   
12.   
<!--打jar包-->
1.      <target name="jar" depends="compile">
2.          <jar jarfile="${target.dir}/${ant.project.name}.jar">
3.              <fileset dir="${classes.dir}">
4.                  <include name="**/*" />
5.              </fileset>   
6.          </jar>   
7.      </target>   
8.   
9.      <target name="preWar" depends="jar">
10.          <copy todir="${temp.dir}/WEB-INF/lib" overwrite="true">
11.              <fileset dir="${target.dir}">
12.                  <include name="${ant.project.name}.jar"/>
13.              </fileset>   
14.          </copy>   
15.          <copy todir="${temp.dir}" overwrite="true">
16.              <fileset dir="${basedir}">
17.                  <include name="${lib.dir}/*.jar" />
18.                  <include name="index.html" />
19.                  <include name="page/**/*.*" />
20.                  <include name="WEB-INF/*.xml" />
21.              </fileset>   
22.          </copy>   
23.      </target>   
24.        
<!--打war包-->
1.      <target name="war" depends="preWar">
2.          <jar jarfile="${target.dir}/${ant.project.name}.war">
3.              <fileset dir="${temp.dir}">
4.                  <include name="**/*.*"/>
5.              </fileset>   
6.          </jar>        
7.      </target>   
8.   
9.      <target name="all" depends="war">
10.          <delete dir="${temp.dir}"/>
11.      </target>   
12.   
13.  </project>   
 
下次再整,后续。。。