apache ant编译项目的一个通用例子
来源:互联网 发布:科目二约车软件 编辑:程序博客网 时间:2024/05/17 02:28
1.引言
之前有个任务就是写个ant将项目打包成jar文件和war包的配置文件交给测试去进行部署使用,因为项目本身是个web项目,同时还有一些相应的后台独立程序也一起写在这个项目下,使用了一段时间后试着自己写个通用的配置文件专门用户做这种发布打包的事情,一劳永逸
2.目录结构
项目是个web项目,使用svn进行管理,标准的web项目目录结构如下
root
|——confg 配置文件存放目录
|——html webroot根目录
|——lib 引用的jar包存放的目录
|——src java源代码存放目录
我在项目下新建了个bin目录用户存放打包配置文件和打包命令
bin
|——build.xml 通用配置文件模版
|——build.properties 参数配置文件
|——jar.shell 打包成jar包脚本
|——war.shell 打包成war包脚本
使用这种的配置方法我们可以仅仅通过修改参数配置文件就可以不断重复使用这个打包的配置文件了
而不用针对不同的项目反复编写不同的build.xml了
3.例子代码
build.xml:
<?xml version="1.0" encoding="UTF-8"?><project name="project" default="process"> <!-- 指定参数配置文件 --> <property file="build.properties" /> <!-- 指定环境变量参数为:SystemVariable --> <property environment="SystemVariable" /> <!-- 指定是否配置主类判断条件 --> <condition property="mainClass.exist"> <isset property="project.mainClass" /> </condition> <!-- 初始化任务,创建对应的文件夹 --> <target name="init"> <!-- 删除上次编译产生的缓存文件 和生成的类文件--> <delete dir="${build.classes.dir}" /> <delete dir="${build.tmp.dir}" /> <!-- 删除上次编译产生打包的依赖包和配置文件包--> <delete file="${build.dist.dir}/${project.name}_config.jar" /> <delete file="${build.dist.dir}/${project.name}_lib.jar" /> <delete file="${build.dist.dir}/${project.name}.jar" /> <delete file="${build.dist.dir}/${project.name}.war" /> <!-- 创建class文件存放的路径和缓存路径 --> <mkdir dir="${build.classes.dir}" /> <mkdir dir="${build.tmp.dir}/${project.name}" /> <mkdir dir="${build.tmp.dir}/${project.name}/classes" /> <mkdir dir="${build.tmp.dir}/${project.name}/config" /> <mkdir dir="${build.tmp.dir}/${project.name}/lib" /> <mkdir dir="${build.tmp.dir}/${project.name}/webroot/WEB-INF/lib" /> <mkdir dir="${build.tmp.dir}/${project.name}/webroot/WEB-INF/classes" /> </target> <!-- 编译任务 --> <target name="compile" depends="init"> <echo message="开始编译java - ${project.name}" /> <!-- 指定编译时源码的路径,生成的class文件存放的目录,以及 编译时的相关参数--> <javac fork="true" executable="${SystemVariable.JAVA_HOME}/bin/javac" srcdir="${build.src.dir}" destdir="${build.classes.dir}" debug="true" debuglevel="lines,vars,source" nowarn="true" includeAntRuntime="no" failonerror="true" > <!--<compilerarg line="-encoding UTF-8 -J-Xms1024m -J-Xmx1024m"/>--> <!-- 将编译时需要的依赖包添加到classespath中,fileset可以多个 --> <!-- 如果是web项目注意把对应的servlet-api.jar jsp-api.jar等相关jar包引入,要不干脆直接将tomcat的lib目录直接引入 --> <classpath> <fileset dir="${build.lib.dir}" includes="*.jar" /> </classpath> <!-- 将源码路径下所有的文件全部加载进来--> <include name="**/*.*" /> <!-- 排除掉不参与编译的文件--> <exclude name="test/**/*.*" /> <exclude name="**/test/*.*" /> <exclude name="example/**/*.*" /> </javac> <echo message="编译完成" /> <echo message="将编译好的Class打成包" /> </target> <target name="jar-target" depends="compile" if="mainClass.exist"> <echo message="将编译好的Class打成包,设置${project.mainClass}为运行的主类" /> <jar destfile="${build.dist.dir}/${project.name}.jar" encoding = "UTF-8" > <!-- 指定main方法和依赖包以及配置文件包,配置文件包用空格分开 --> <manifest> <attribute name="Main-Class" value="${project.mainClass}"/> <attribute name="Class-Path" value="${project.name}_lib.jar ${project.name}_config.jar"/> </manifest> <fileset dir="${build.classes.dir}"> <!-- 全部加进去吧,不止class文件,如果只加的话可以过滤*.class --> <include name="**/*.class" /> </fileset> </jar> <echo message="打包完成" /> </target> <target name="jar" depends="jar-target" unless="mainClass.exist"> <echo message="将编译好的Class打成包,不设置主类" /> <jar destfile="${build.dist.dir}/${project.name}.jar" encoding = "UTF-8"> <manifest> <attribute name="Class-Path" value="${project.name}_lib.jar"/> </manifest> <fileset dir="${build.classes.dir}"> <include name="**/*.class" /> </fileset> </jar> <echo message="打包完成" /> </target> <!-- 打包相关的文件 --> <target name="process" depends="compile"> <echo message="复制相关配置文件" /> <copy todir="${build.tmp.dir}/${project.name}/config"> <fileset dir="${build.config.dir}" includes="**/*"/> </copy> <echo message="复制关联的jar包" /> <copy todir="${build.tmp.dir}/${project.name}/lib" overwrite="true"> <fileset dir="${build.lib.dir}" includes="**/*"/> </copy> <jar destfile="${build.dist.dir}/${project.name}_config.jar" basedir="${build.tmp.dir}/${project.name}/config"/> <jar destfile="${build.dist.dir}/${project.name}_lib.jar" basedir="${build.tmp.dir}/${project.name}/lib"/> </target> <target name="war" depends="compile"> <echo message="复制文件" /> <copy todir="${build.tmp.dir}/${project.name}/webroot/WEB-INF/classes"> <fileset dir="${build.config.dir}" includes="**/*"/> </copy> <copy todir="${build.tmp.dir}/${project.name}/webroot" overwrite="true"> <fileset dir="${build.webroot.dir}" includes="**/*"/> </copy> <copy todir="${build.tmp.dir}/${project.name}/webroot/WEB-INF/lib"> <fileset dir="${build.lib.dir}" includes="*.jar" /> </copy> <copy todir="${build.tmp.dir}/${project.name}/webroot/WEB-INF/classes"> <fileset dir="${build.classes.dir}"> <include name="**/*.class" /> </fileset> </copy> <echo message="复制文件完成" /> <echo message="生成war" /> <jar destfile="${build.dist.dir}/${project.name}.war" basedir="${build.tmp.dir}/${project.name}/webroot"> </jar> <echo message="生成war完成" /> </target></project>
build.properties:
####################以下路径全部都是相对于build.xml存放的位置##相关依赖jar包的存放目录build.lib.dir=../lib##相关配置文件的存放目录build.config.dir=../config##java源代码的存放目录build.src.dir=../src##编译的class文件的存放目录build.classes.dir=../classes##webroot根目录build.webroot.dir=../html##中间文件的缓存目录build.tmp.dir=tmp##打包结果存放的目录build.dist.dir=dist##########################################项目名称project.name=test##Main类可以不设置,那么就是不设置Main方法的打包project.mainClass=com.test.MainClass####################
jar.shell:(前提,将ant配置进环境变量内可以直接调用)
ant -buildfile build.xml
运行结果图
war.shell:(前提,将ant配置进环境变量内可以直接调用)
ant -buildfile build.xml war
运行结果图
1 0
- apache ant编译项目的一个通用例子
- 一个简单的Ant例子
- 一个ANT脚本的例子
- 通用的编译打包工具Ant
- apache ant 的使用--编译、打包
- 一个ant发布war的例子
- 一个简单的ant入门例子
- 一个全量的ant脚本例子
- 一个例子介绍Ant的用法
- 使用Apache ant 1.9.6编译打包Web项目
- 使用Apache Ant编译打包运行Java项目
- Apache Ant 项目名称的由来
- [Ant] [StartWithAnt] 第一章 一个简单的Ant例子
- [Ant] [StartWithAnt] 第一章 一个简单的Ant例子
- Apache MINA 的一个例子
- 译:Apache Maven-简化java的构建过程--比apache ant更多(2) 创建一个简单的maven项目
- 通用ANT编译发布打包启动tomcat的模板
- 最简化的ant编译部署项目
- Android设计模式之单例模式的七种写法
- spring整合mybatis文件
- 厉害了!家里来了黑科技
- Dagger2的组件依赖及使用详解
- CentOS-6.t将安装光盘做为YUM库来安装程序
- apache ant编译项目的一个通用例子
- spring 定时器
- AngularJS入门之如何快速上手(详细讲解什么是angular)
- 实现js输入框只允许输入金额
- C语言的简单小例题程序
- Hibernate实体关系关联映射中配置文件的编写
- BookList
- CUDA-CODE4-并行编程-blockIDx
- 二叉树遍历111. Minimum Depth of Binary Tree