大家都知道,“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>
下次再整,后续。。。