|
<?xml version="1.0"
?> |
|
<!-- |
|
默认任务 default 可以指定直接执行ant |
|
命令的时候默认的任务可以通过指定任务 |
|
名称(target name)运行不同的任务 比如: |
|
ant package |
|
--> |
|
<project
name="tax-calculator"
default="package"
basedir="."> |
|
|
|
<!-- |
|
设置property 可以在其他地方通过${xxx} 的方式引用 也可以通过 property file设 置具体的properties文件 |
|
这里有个优先级 的问题 首先你可以在执行ant命令 这个优 先级是最大的 其次的是properties 文件 中的属性 |
|
最后的优先级是写在build.xml 中的property(很怪) |
|
--> |
|
<property
name="project.name"
value="exampleant"
/> |
|
<property
name="project.version"
value="snapshot"
/> |
|
|
|
<property
name="base.dir"
value="."
/> |
|
<property
name="dist.dir"
value="${base.dir}/dist"
/> |
|
<property
name="wardist.dir"
value="${base.dir}/wardist"
/> |
|
|
|
<property
name="testlog.dir"
value="${base.dir}/testlog"
/> |
|
<property
name="testlog.html.dir"
value="${testlog.dir}/html"
/> |
|
|
|
<property
name="source.dir"
value="${base.dir}/src"
/> |
|
<property
name="webroot.dir"
value="${base.dir}/web"
/> |
|
|
|
<property
name="build.dir"
value="${base.dir}/build"
/> |
|
<property
name="build.classes.dir"
value="${build.dir}/classes"
/> |
|
<property
name="build.test.classes.dir"
value="${build.dir}/test-classes"
/> |
|
<property
name="build.classes.main"
value="com.javapowertools.taxcalculator.Main"
/> |
|
<property
name="source.main.dir"
value="${source.dir}/main"
/> |
|
<property
name="source.test.dir"
value="${source.dir}/test"
/> |
|
<property
name="lib.dir"
value="${base.dir}/lib"
/> |
|
|
|
<!-- |
|
taskdef 可以用taskdef自定义一个任务 比如远程部署等(回去有空的话再研究下cargo) |
|
http://hi.baidu.com/giter/blog/item/d9fcd6431446f41673f05d1f.html |
|
--> |
|
<!-- |
|
ant 引用其他构建文件中的任务(加载顺序由上到下 尤其要注意不要引用不存在的property 这里用的是basedir) |
|
再者当前构建文件内的任务无法直接引用其他构建文件的任务(比如前置任务) 分开文件固然比较好 但是这里依旧要注意 |
|
|
|
antfile:构建文件位置 |
|
target:任务名称 |
|
--> |
|
<ant
antfile="${base.dir}/targets/init.xml"
target="init"
/> |
|
<ant
antfile="${base.dir}/targets/bootstrap-findbugs.xml"
target="display-properties"
/> |
|
|
|
<!-- |
|
target 任务 |
|
name:任务名称 |
|
depends:前置任务(强调该任务执行前必须执行depends指定的任务) |
|
description:描述 |
|
--> |
|
|
|
<!-- |
|
设置类路径 |
|
--> |
|
<path
id="compile.classpath"> |
|
<fileset
dir="${lib.dir}"
includes="*.jar"
/> |
|
<pathelement
path="${build.classes.dir}"
/> |
|
</path> |
|
|
|
<path
id="test.compile.classpath"> |
|
<path
refid="compile.classpath"
/> |
|
<pathelement
path="${build.test.classes.dir}"
/> |
|
</path> |
|
|
|
<!-- |
|
javac 编译Java源文件 |
|
srcdir:源文件目录
|
|
destdir:输出目录 |
|
classpathref:classpath信息 |
|
includes:告诉Ant编译过程中编译哪些位置的源文件(其他位置被忽视) |
|
excludes:告诉Ant编译过程中忽略那些位置的源文件 |
|
debug:是否开启调试信息 |
|
source:强调开发源代码的JDK版本 |
|
target:强调编译后的Class文件应该支持的JDK版本 |
|
compiler:指定编译器(不一定非得使用Sun的标准编译器进行编译) |
|
--> |
|
<target
name="compile"
description="Compile Java code"> |
|
<javac
srcdir="${source.main.dir}/resources"
destdir="${build.classes.dir}"
source="1.6"
target="1.6"
debug="true"
includes="com.javapowertools.taxcalculator.**"
/> |
|
<javac
srcdir="${source.main.dir}/java"
destdir="${build.classes.dir}"
/> |
|
</target> |
|
|
|
<target
name="compile-test"
depends="compile"
description="Compile Unit Tests"> |
|
<javac
srcdir="${source.test.dir}/resources"
classpathref="test.compile.classpath"
destdir="${build.test.classes.dir}"
/> |
|
<javac
srcdir="${source.test.dir}/java"
classpathref="test.compile.classpath"
destdir="${build.test.classes.dir}"
/> |
|
</target> |
|
|
|
<!-- |
|
jar 打包Java文件 |
|
destfile:指定输出文件 |
|
basedir:类文件所在位置 |
|
|
|
tstamp 生成时间戳 |
|
format:设置指定格式 |
|
manifest 设置MANIFEST.MF信息 |
|
attribute 属性对象 |
|
name:属性名 |
|
value:属性值 |
|
--> |
|
<target
name="package"
depends="compile,test,test-report"
description="Create Jar file"> |
|
<tstamp> |
|
<format
property="build.date"
pattern="yyyy-MM-dd"
/> |
|
<format
property="build.time"
pattern="hh:mm:ss"
/> |
|
</tstamp> |
|
<jar
destfile="${dist.dir}/${project.name}-${project.version}.jar"
basedir="${build.classes.dir}"> |
|
<manifest> |
|
<attribute
name="Main-Class"
value="${build.classes.main}"
/> |
|
<attribute
name="Built-By"
value="${user.name}"
/> |
|
<attribute
name="Specification-Title"
value="${project.name}"
/> |
|
<attribute
name="Specification-Version"
value="${project.version}"
/> |
|
<attribute
name="Specification-Vendor"
value="ACME Incorporated"
/> |
|
<attribute
name="Implementation-Title"
value="common"
/> |
|
<attribute
name="Implementation-Version"
value="${project.version} - built at ${build.time} on ${build.date}"
/> |
|
<attribute
name="Implementation-Vendor"
value="ACME Incorporated"
/> |
|
</manifest> |
|
</jar> |
|
</target> |
|
|
|
<!--
|
|
junit 单元测试 |
|
printsummary:是否显示单元测试类列表,如果是否的话Ant将运行测试但不显示测试结果,除非有单元测试失败 |
|
haltonfailure:是否测试失败就停止构建,默认为否,也就是即使测试失败也继续构建
|
|
fork:是否重新启用一个JVM进程进行测试(默认为false 正常情况下重新启用一个JVM进程进行测试会有意想不到的效果) |
|
failureproperty:创建一个指定名称的变量 变量值为false或true 取决于junit的测试结果 并可以在其他target中被fail标签 |
|
assertions 指定断言机制 |
|
enable 该属性为所有非系统类激活断言 |
|
package:指定某一个包下的类激活断言 |
|
class:指定具体某一个类激活断言 |
|
|
|
|
|
test 指定单元测试的类 |
|
name:类名 |
|
|
|
batchtest 批量测试 |
|
|
|
todir:指定日志输出目录 |
|
|
|
fileset 文件信息 |
|
dir:所在目录 |
|
includes:包含的测试类 |
|
formatter 指定详细信息输出格式 |
|
|
|
type:有三种格式 brief只提供失败测试的详细信息 plain提供了通过的和失败的测试数量,并列出实际成功的测试 |
|
xml则用于生成报告 |
|
usefile:是否创建文件,默认为true |
|
--> |
|
<target
name="test"
depends="compile-test"
description="Run unit tests"> |
|
<junit
printsummary="true"
haltonfailure="false"
fork="false"
failureproperty="test.failures"> |
|
<assertions> |
|
<enable
/> |
|
</assertions> |
|
<classpath
refid="test.compile.classpath"
/> |
|
<formatter
type="xml"
usefile="true"
/> |
|
<!-- |
|
<test name="com.javapowertools.taxcalculator.TaxRateTest" /> |
|
--> |
|
<batchtest
todir="${testlog.dir}"> |
|
<fileset
dir="${build.test.classes.dir}"
includes="**/*Test.class"
/> |
|
</batchtest> |
|
</junit> |
|
</target> |
|
|
|
<!--
|
|
关于生成测试报告的建议 |
|
如果开发人员选择了生成测试报告 也就表示不能在测试出现问题的时候简单的停止构建(这样会影响报告的完整性) |
|
但是将haltonfailure属性设置为true并不是好的解决方式,另一方面,如果测试失败就停止构建是个好主意, |
|
事实上持续构建系统是依赖这一点的 |
|
解决方式参考Java开发超级工具集中文版50页 |
|
--> |
|
|
|
<!--
|
|
junitreport 生成报告(通过打包在ant-junit.jar内的xsl样式表来生成 有必要的话可以自行更改) |
|
todir:源文件(XML)目录 |
|
|
|
report HTML生成模板信息定义 |
|
format:指定是否使用Frame 有noframes和frames两种 |
|
todir:指定HTML文件输出位置 |
|
styledir:可以自己指定HTML使用的样式 |
|
--> |
|
<target
name="test-report"
depends="test"
description="Generate HTML unit test reports"> |
|
<junitreport
todir="${testlog.dir}"> |
|
<fileset
dir="${testlog.dir}"> |
|
<include
name="TEST-*.xml"
/> |
|
</fileset> |
|
<report
format="frames"
todir="${testlog.html.dir}"
/> |
|
</junitreport> |
|
<fail
if="test.failures"
message="There were test failures."
/> |
|
</target> |
|
<!-- |
|
war 打包war文件 |
|
destfile:指定输出文件 |
|
webxml:指定web.xml位置 |
|
|
|
classes 指定类文件位置 |
|
|
|
lib 指定lib文件位置 |
|
|
|
|
|
--> |
|
<target
name="war"
depends="test-report"
description="Generate WAR file"> |
|
<war
destfile="${wardist.dir}/${project.name}-${project.version}.war"
webxml="${webroot.dir}/WEB-INF/web.xml"> |
|
<fileset
dir="${testlog.html.dir}"
/> |
|
<classes
dir="${build.classes.dir}"
/> |
|
|
|
<lib
dir="${lib.dir}"> |
|
<include
name="*.jar"
/> |
|
</lib> |
|
</war> |
|
</target> |
|
|
|
<!--
|
|
copy 复制文件 |
|
file:被复制的文件(也可以用fileset指定多个被复制的目录,具体用法参考前面fileset的用法) |
|
todir:目标目录 |
|
tofile:目标文件(当原始文件需要重命名的时候) |
|
--> |
|
<target
name="depoly"
depends="war"
description="Depoly to local Tomcat instance"> |
|
<copy
file="${wardist.dir}/${project.name}-${project.version}.war"
todir="D:/Tomcat6/webapps"
/> |
|
</target> |
|
|
|
<target
name="clean"
description="Deletes generated dire ctories"> |
|
<delete
dir="${build.dir}"
/> |
|
<delete
dir="${dist.dir}"
/> |
|
<delete
dir="${testlog.dir}"
/> |
|
</target> |
| </project> |
build.xml详解
最新推荐文章于 2021-09-30 14:32:14 发布
本文详细介绍了构建软件开发流程的关键步骤,包括设置环境、编译源码、测试、打包、部署等,确保从源码到部署的每一个环节都能高效完成。

5309

被折叠的 条评论
为什么被折叠?



