java学习笔记之ant标签详解
项目组一直都是使用ant来打包的,之前处于应用阶段。后来想想只有自己的才是最好的,所以开始学习了一下。不罗嗦直接上xml。肯定有没有用到的标签或者用错的地方,希望大家积极指正,一起学习。
<!-- project 项目标签,每个build.xml只有一个 -->
<!-- name 表示项目名 -->
<!-- basedir 表示项目的基准目录 ; . 表示当前目录,即build.xml所在的目录-->
<!-- default 表示默认的运行target任务的名称,例如default="main",表示执行build.xml,会默认运行名为main的target-->
<project name="bigGuoTest" basedir="." default="main">
<!-- property 用来定义变量名与值,自定义设置。以下是我用到变量的所代表的意思-->
<!-- ${project.home} 当前路径 -->
<property name="project.home" value="." />
<!-- ${src.dir} 该项目工程src的路径-->
<property name="src.dir" value="${project.home}/src" />
<!-- ${build.dir} 该项目工程构建的路径-->
<property name="build.dir" value="${project.home}/build" />
<!-- ${classes.dir} 该项目工程编译文件存放的路径-->
<property name="classes.dir" value="${build.dir}/classes" />
<!-- ${jar.dir} 该项目工程生成jar的路径-->
<property name="jar.dir" value="${build.dir}/jar" />
<!-- ${source.file} 该项目工程生成jar的路径,主要是学习,没怎么用过-->
<property name="source.file" value="${jar.dir}" />
<!-- ${move.file} 该项目移动的路径,主要是学习,没怎么用过-->
<property name="move.file" value="${build.dir}/move" />
<!-- ../../fileFolderName 表示当前目录下的,父目录的父目录下的fileFolderName文件夹 -->
<!-- <property name="lib.dir" value="../../publicLib/lib" /> -->
<property name="lib.dir" value="${project.home}/lib" />
<!-- ${main.class} 表示可执行jar的执行类路径 -->
<property name="main.class" value="test.Test" />
<!-- path 一个类路径 -->
<!-- 用于编译的时候指定引用类 -->
<path id="reference.classpath">
<!-- fileset 一组file集合-->
<!-- dir 表示文件路径-->
<fileset dir="${lib.dir}">
<!-- include 包括的文件,可以用*表示任意-->
<include name="**/*.jar" />
</fileset>
</path>
<!-- target 可执行任务标签,用来做不同的事情,该标签是为了删除旧的构建目录-->
<!-- name 表示target标签名-->
<!-- project标签中defalut对应的名字,用于执行build.xml文件-->
<target name="main" depends="clean.build,show.version" />
<!-- 清理上次编译造成的垃圾,并且重新编译-->
<target name="clean.build" depends="clean,package.jar" />
<!-- 清理上次编译造成的垃圾-->
<target name="clean">
<!-- delete 删除目录-->
<!-- dir 表示删除目录的路径-->
<delete dir="${build.dir}" />
</target>
<!-- depends 表示该可执行标签执行前,需要先执行名为compile的target任务 -->
<target name="package.jar" depends="compile">
<!-- 创建一个文件夹 -->
<mkdir dir="${jar.dir}" />
<!-- jar 生成一个jar -->
<!-- destfile 表示jar的名字 -->
<!-- basedir 表示被归档的文件夹名字,即要被打包成jar的文件夹 -->
<!-- excludes 表示排除的class,测试发现没效果,不知道是不是我打开的方式不对-->
<!-- includes 没看懂 -->
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}" excludes="${classes.dir}/test/Test2.class">
<!-- manifest 指定META-INF/MANIFEST.MF文件中的内容 -->
<manifest>
<!-- attribute 代表属性 -->
<!-- name 表示属性名 -->
<!-- value 表示该属性的值 -->
<!-- Class-Path 表示名为Class-Path的属性,表示jar的引用jar路径 -->
<!-- 注意:引用以空格作为分割,保持如下形式添加就行 -->
<attribute name="Class-Path" value=".
/home/projectPublicLib/lib/antlr-2.7.7.jar
/home/projectPublicLib/lib/jedis-2.9.0.jar
"/>
<!-- Main-Class 表示名为Main-Class的属性 -->
<!-- 表示直接运行jar时候运行的类的名字 -->
<attribute name="Main-Class" value="${main.class}" />
</manifest>
</jar>
</target>
<!-- 创建编译目录,并编译java文件-->
<target name="compile">
<!-- mkdir 创建文件目录 -->
<!-- dir 表示文件目录的路径 -->
<mkdir dir="${classes.dir}" />
<!-- javac 编译java文件,生成class文件 -->
<!-- srcdir 表示源程序的目录 -->
<!-- destdir 表示class文件的输出目录 -->
<!-- includes 表示包含的java文件 -->
<!-- encoding 表示编码格式 -->
<javac target="1.7" source="1.7" srcdir="${src.dir}" destdir="${classes.dir}"
includes="**/*.java" encoding="utf-8" >
<!-- refid 表示引用的jar所在全路径 -->
<classpath refid="reference.classpath" />
<compilerarg line="-encoding UTF-8 "/>
</javac>
<!-- copy 复制文件的标签 -->
<!-- file 表示文件路径及名称 -->
<!-- todir 表示要复制到的位置 -->
<copy file="${src.dir}/log4j.properties" todir="${classes.dir}" />
</target>
<!-- 该标签是为了显示jdk版本和ant版本-->
<target name="show.version">
<!-- echo 输出标签 -->
<!-- message 表示输出的内容 -->
<echo message="JDK:${java.vm.name} ${java.version}" />
<echo message="ANT:${ant.version}" />
</target>
<!-- 写在下边的基本用不到,主要是学习使用-->
<!-- 移动文件或者文件夹,用来类似于linux的mv命令。-->
<target name="move">
<mkdir dir="${move.file}"/>
<!-- move 移动标签,用来类似于linux的mv命令-->
<!-- file 表示原文件路径-->
<!-- tofile 表示目标文件的路径-->
<echo message="移动jar包"/>
<move file="${source.file}" tofile="${move.file}/123"/>
<echo message="移动jar到目标目录下"/>
<copy file="${move.file}/123/${ant.project.name}.jar" todir="${source.file}"/>
<!-- todir 表示目标目录的路径-->
<move file="${source.file}" todir="${move.file}"/>
</target>
<!-- 运行生成的jar-->
<target name="run" depends="package.jar">
<!--java 运行已经编译好class文件-->
<!--classname 表示执行的class类名字,可以没有,只要jar中有Main-Class属性即可-->
<!--jar 表示该类所在的jar包全路径-->
<!--classpath 表示引用所用到的jar路径-->
<!--fork 表示是否在一个新的虚拟机中运行该类-->
<!--failonerror 表示是否在当出现错误时自动停止-->
<!--output 表示输出文件全路径-->
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true" classpath="${reference.classpath}" >
<!-- <classpath refid="project.classpath" />-->
</java>
</target>
</project>