1. 如何将源码及资源文件打包为jar文件
项目目录结构示例:
图1项目目录结构
1.1 打包class文件为jar
task: 初始化 -> 编译 -> 打包
1.1.1 build.properties
#编译保存的目录
build.dir=${basedir}\\build
#源代码目录
src.dir=${basedir}\\src
#打包的目录
dist.dir=${basedir}\\dist
#非src下配置文件目录
config.dir=${basedir}\\config
1.1.2 build_jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="myProject" default="dist">
<description>
simple example build file
</description>
<!-- 引入文件中的配置项 -->
<property file="build.properties"/>
<target name="init">
<!-- 创建时间戳-->
<tstamp/>
<!-- 创建构建目录用于编译 -->
<mkdir dir="${build.dir}"/>
</target>
<target name="compile" depends="init" description="complie the source">
<!-- 编译java代码从${src}到${build} -->
<javac srcdir="${src.dir}" destdir="${build.dir}">
<compilerarg line="-encoding UTF-8"/>
</javac>
</target>
<target name="dist" depends="compile" description="generate the distribution">
<!-- 创建打包目录 -->
<mkdir dir="${dist.dir}/lib"/>
<!-- 将编译的class打包成MyProject-${DSTAMP}.jar文件 -->
<jar destfile="${dist.dir}/lib/MyProject-${DSTAMP}.jar">
<!-- 编译的class文件目录 -->
<fileset dir="${build.dir}"></fileset>
</jar>
</target>
<target name="clean" description="clean up">
<!-- 删除${build}和${dist} 目录 -->
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
</target>
</project>
1.2 打包的时候包含资源文件
task: 初始化->编译-> 打包
a) 编译源代码后,拷贝非java文件到build目录中
b) 打包为jar过程中,将其它资源文件也一并打包
1.2.1拷贝非java文件到build目录中
<target name="compile" depends="init" description="complie the source">
<!-- 编译java代码从${src}到${build} -->
<javac srcdir="${src.dir}" destdir="${build.dir}">
<compilerarg line="-encoding UTF-8"/>
</javac>
<!-- 将src下的非java文件拷贝到build目录 -->
<copy todir="${build.dir}" >
<fileset dir="${src.dir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
1.2.2将其它资源文件也一并打包
<target name="dist" depends="compile" description="generate the distribution">
<!-- 创建打包目录 -->
<mkdir dir="${dist.dir}/lib"/>
<!-- 将编译的class打包成MyProject-${DSTAMP}.jar文件 -->
<jar destfile="${dist.dir}/lib/MyProject-${DSTAMP}.jar">
<!-- 编译的class文件目录 -->
<fileset dir="${build.dir}"></fileset>
<!-- 其它资源文件目录 -->
<fileset dir="${config.dir}"></fileset>
</jar>
</target>
2. 如何实现tomcat下web app的部署
项目目录结构:
图2 web项目目录结构
2.1 打包成war进行归档
task: 初始化 ->编译 -> 打成war
编译源代码后,拷贝非java文件到build目录中
打包为war过程中,将其它资源文件和jar也一并打包,按照web应用的目录层次结构进行拷贝打包
web应用最基本的目录层次结构:
appname
WEB-INF
classes
lib
web.xml
根据项目的目录结构,我们的打包规则是:
1 project name为appname
2 web/config目录下的配置文件放置在WEB-INF/classes目录下(除了web.xml)
3 libs的jar放置在WEB-INF/lib目录下
4 web/config/web.xml放置在WEB-INF下
5 pages目录下的内容放置在appname目录下
2.1.1build.properties
#编译保存的目录
build.dir=${basedir}\\build
#源代码目录
src.dir=${basedir}\\src
#war存放目录
war.dir=${basedir}\\war
#libs存放目录
lib.dir=${basedir}\\libs
#非src下配置文件目录
config.dir=${basedir}\\web\\config
#web文件存放目录
web.dir=${basedir}\\web
#项目名称,web应用访问的名称
project.name=antweb
#tomcat目录
tomcat.dir=K:\\apache-tomcat-7.0.63-windows-x64-2\\apache-tomcat-7.0.63
#webapps目录
webapps.dir=${tomcat.dir}\\webapps
2.1.2 build_web.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="${project.name}" default="war-deploy">
<description>
web deploy build file
</description>
<!-- 引入文件中的配置项 -->
<property file="build.properties"/>
<target name="init">
<!-- 创建时间戳-->
<tstamp/>
<!-- 创建构建目录用于编译 -->
<mkdir dir="${build.dir}"/>
</target>
<target name="compile" depends="init" description="complie the source">
<!-- 编译java代码从${src}到${build} -->
<javac srcdir="${src.dir}" destdir="${build.dir}">
<compilerarg line="-encoding UTF-8"/>
</javac>
<!-- 将src下的非java文件拷贝到build目录 -->
<copy todir="${build.dir}" >
<fileset dir="${src.dir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
<!-- 拷贝配置文件到build目录 -->
<copy todir="${build.dir}">
<fileset dir="${config.dir}">
<exclude name="**/web.xml"/>
</fileset>
</copy>
</target>
<target name="war" depends="compile" description="generate the distribution">
<!-- 创建打包目录 -->
<mkdir dir="${war.dir}/archive"/>
<!-- 打包成${project.name}.war文件 -->
<war destfile="${war.dir}/archive/${project.name}.war"
webxml="${config.dir}/web.xml">
<lib dir="${lib.dir}"/>
<classes dir="${build.dir}"/>
<zipfileset dir="${web.dir}/pages">
</zipfileset>
</war>
</target>
<target name="clean" description="clean up">
<!-- 删除${build}和${dist} 目录 -->
<delete dir="${build.dir}"/>
<delete dir="${war.dir}"/>
<delete dir="${webapps.dir}/${project.name}"/>
</target>
</project>
2.2 拷贝web应用需要的文件到tomcat webapps目录下
<target name="war-deploy" depends="compile" description="generate the distribution">
<!-- 创建应用目录 -->
<mkdir dir="${webapps.dir}/${project.name}"/>
<mkdir dir="${webapps.dir}/${project.name}/WEB-INF"/>
<mkdir dir="${webapps.dir}/${project.name}/WEB-INF/classes"/>
<mkdir dir="${webapps.dir}/${project.name}/WEB-INF/lib"/>
<!-- 拷贝class和配置文件到WEB-INF/classes目录 -->
<copy todir="${webapps.dir}/${project.name}/WEB-INF/classes">
<fileset dir="${build.dir}"/>
</copy>
<!-- 拷贝libs到WEB-INF/lib目录 -->
<copy todir="${webapps.dir}/${project.name}/WEB-INF/lib">
<fileset dir="${lib.dir}"/>
</copy>
<!-- 拷贝web.xml到WEB-INF目录 -->
<copy todir="${webapps.dir}/${project.name}/WEB-INF">
<fileset file="${config.dir}/web.xml"/>
</copy>
<!-- 拷贝页面到应用程序根目录 -->
<copy todir="${webapps.dir}/${project.name}">
<fileset dir="${web.dir}/pages"></fileset>
</copy>
</target>