build.xml的相关知识 build.xml
是ANT
构建和部署Java
项目的工具,比较老了.
文件基本结构
折叠代码块 XML
复制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xml > <project name ="helloWorld" > <property name ="test" value ="1234" /> <target name ="sayHelloWorld" > <tstamp /> <copy file ="file.txt" tofile ="copy.txt" /> <copy todir ="../newdir/dest_dir" > <fileset dir ="src_dir" /> </copy > <copy file = "my.txt" todir ="../newdir/dest_dir" /> <delete file ="photo/test.jpg" /> <delete dir ="photo/" /> <delete includeEmptyDirs ="true" > <fileset dir ="." includes ="**/*.bak" /> </delete > <mkdir dir ="build" /> <move file ="fromfile" tofile ="tofile" /> <move todir ="../newdir/dest_dir" > <fileset dir ="src_dir" /> </move > <move file ="fromfile" todir ="movedir" /> <echo message ="test" file ="logs/system.log" append ="true" /> </target > <path id ="myPath" > <fileset dir ="lib" includes ="*.jar" > </path > </project >
常用命令
折叠代码块 BASH
复制代码
1 2 3 4 5 6 ant sayHelloWorld ant -f hello.xml sayHelloWorld ant -projecthelp
案例解释 案例1
折叠代码块 XML
复制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xml > <project name ="helloWorld" basedir ="/home/deepin/Workspace/3_weixin" > <target name ="targetA" if ="ant.java.version" > <echo message ="Java Version:${ant.java.version}" /> </target > <target name ="targetB" depends ="targetA" unless ="easul" > <description > 基本描述 </description > <echo message ="基础路径是:${basedir}" /> </target > </project >
折叠代码块 BASH
复制代码
1 2 3 4 5 6 7 8 9 10 ant targetB Buildfile: /home/deepin/Workspace/3_weixin/ant_test/build.xml targetA: [echo ] Java Version:11 targetB: [echo ] 基础路径是:/home/deepin/Workspace/3_weixin BUILD SUCCESSFUL
在这个build.xml
里边,运行targetB
,因为他依赖targetA
,所以先执行targetA
,if
判断的是有没有该属性 系统安装了java
环境,则ant.java.version
属性存在,也即执行该target,输出了java版本targetA
执行后,执行targetB
,unless
判断easul
不存在,于是执行targetB
案例2
折叠代码块 XML
复制代码
1 2 3 4 5 6 7 8 9 10 <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xml > <project default ="myProperty" name ="propertyDemo" basedir ="/home" > <property name = "myTest" value ="im created by ant" /> <target name ="myProperty" > <echo message ="${basedir}" /> <echo message ="${ant.project.name}" /> <echo message ="${myTest}" /> </target > </project >
折叠代码块 BASH
复制代码
1 2 3 4 5 6 7 8 9 ant Buildfile: /home/deepin/Workspace/3_weixin/ant_test/build.xml myProperty: [echo ] /home [echo ] propertyDemo [echo ] im created by ant BUILD SUCCESSFUL
通过定义变量myTest
可以在输出语句中进行变量的使用. 同时也可以输出ant内部支持的变量
ant构建Java工程
折叠代码块 XML
复制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xml > <project default ="jar" name ="jarTest" basedir ="." > <target name ="clean" > <delete dir = "build/" /> </target > <target name ="compile" depends ="clean" > <mkdir dir ="build/classes" /> <javac srcdir ="src" destdir ="build/classes" /> </target > <target name ="run" depends = "compile" > <java classname ="HelloWorld" > <classpath > <pathelement path = "build/classes" /> </classpath > </java > </target > <target name ="jar" depends = "run" > <jar destfile ="helloworld.jar" basedir ="build/classes" > <manifest > <attribute name ="Main-class" value ="HelloWorld" /> </manifest > </jar > </target > </project >
这个构建清单默认执行到jar
.这里从依赖结构的开始进行解释 先执行clean
,删除build
路径,里边可能存放有上次已经编译过的文件 然后执行compile
,创建build/classes
路径,存放编译的class
文件, 执行javac
将src
路径下的java文件编译到build/classes
下, 然后执行run
,通过java
命令执行HelloWorld
这个class文件,在其内部标签中指定项目根路径 然后执行jar
,将所有的basedir
下的class文件打包成helloworld.jar
文件,并在jar内制定mainfest
清单
ant构建war工程
折叠代码块 XML
复制代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE xml > <project default ="war" name ="warTest" basedir ="." > <property name ="classes" value ="build/classes" /> <property name ="build" value ="build" /> <property name ="lib" value ="webroot/WEB-INF/lib" /> <target name ="clean" > <delete dir = "${build}" /> </target > <target name ="compile" depends ="clean" > <mkdir dir ="${classes}" /> <javac srcdir ="src" destdir ="${classes}" /> </target > <target name ="war" depends = "compile" > <war destfile ="${build}/webroot.jar" webxml ="webroot/WEB-INF/web.xml" > <fileset dir ="webroot" includes ="**/*.jsp" /> <lib dir ="${lib}" /> <classesdir dir ="${classes}" /> </war > </target > </project >
参考 构建工具的进化:ant,maven,gradle
v1.5.2