会写代码,能做项目,最后却不会打包和部署,这是一件非常囧的事情。。
于是,ant的学习开始了。这里要吐槽一下百度,搜索结果常常令朕虎躯一震,原则上,点开的网页排版差的一律不看,抄袭抄不全的也一律不看,程序猿也是有脾气的,哈哈。
之前看过的maven,解决依赖包的问题比较爽快,这里要感谢下伟大的apache。
跟当初在linux下学习makefile一知半解的情况相比,再看ant,ant并不是什么特别高端的东西,有maven的话,我可能还是会用maven,因为ant的build文件实在是......长。
废话一大堆,附上自己的build.xml做个纪念,基本上都在注释里写好了用法。
1 <?xml version="1.0" encoding="utf-8"?> 2 <project default="main" basedir="."> 3 <!-- main可以指定入口target, 默认target可立即执行java入口main函数 --> 4 <!-- 常用路径配置 --> 5 <property name="src.dir" value="src" /> 6 <property name="report.dir" value="report" /> 7 <property name="classes.dir" value="classes" /> 8 <property name="lib.dir" value="lib" /> 9 <property name="dist.dir" value="dist" /> 10 <property name="doc.dir" value="doc"/> 11 <property name="main-class" value="com.linxus.main.Main"/> 12 <property name="user.name" value="Linxus"/> 13 <!-- 第三方库路径 --> 14 <path id="classpath"> 15 <fileset dir="${lib.dir}"> 16 <include name="*.jar"/> 17 </fileset> 18 </path> 19 20 <!-- 入口 --> 21 <target name="main" depends="clean, compile, pack" description="Main target"> <!-- 按依赖的target顺序依此执行 --> 22 <echo>Finished Building the .jar file.</echo> 23 </target> 24 25 <!-- 清除旧版本 --> 26 <target name="clean" description="Clean"> 27 <delete dir="${dist.dir}" /> 28 <delete dir="${classes.dir}" /> 29 <echo>Clean up Old Files.</echo> 30 </target> 31 32 <!-- 编译 --> 33 <target name="compile" description="Compilation target"> 34 <mkdir dir ="${basedir}/classes"/> 35 <javac srcdir ="${basedir}/src" destdir ="${basedir}/classes" classpathref="classpath" optimize="true"> 36 <compilerarg line="-encoding UTF-8 "/><!-- 解决编译时的编码问题 --> 37 </javac> 38 </target> 39 40 <!-- 打包 --> 41 <target name="pack" description="Compression target"> 42 <mkdir dir ="${dist.dir}"/> 43 <!-- 这里解决依赖第三方库的问题,MANIFEST.MF文件的CLASS-PATH是需要你自己去指定的,不能偷懒 44 否则就是 ☞CLASSNOTFOUNDEXCEPTION --> 45 <pathconvert property ="libs.project" pathsep =" "> 46 <mapper> 47 <chainedmapper> 48 <!-- 移除绝对路径 --> 49 <flattenmapper /> 50 <!-- 第三方库通常放在lib下。理由在↑ --> 51 <globmapper from ="*" to ="lib/*" /> 52 </chainedmapper> 53 </mapper> 54 <path> 55 <!-- 第三方库的路径 --> 56 <fileset dir ="${lib.dir}" > 57 <include name ="**/*.jar"/> 58 </fileset> 59 </path> 60 </pathconvert> 61 62 <!-- 打包时间的生成 --> 63 <tstamp> 64 <format property="buildtime" pattern="yyyy-MM-dd" /> 65 </tstamp> 66 67 <jar destfile="${dist.dir}/JServer-${buildtime}.jar" basedir="${basedir}/classes"> 68 <!-- log4j配置文件 --> 69 <fileset dir="${src.dir}"> 70 <include name="log4j.properties" /> 71 </fileset> 72 <manifest> 73 <!-- 作者个人信息 --> 74 <attribute name="Built-By" value="${user.name}" /> 75 <attribute name="Built-Time" value="${buildtime}" /> 76 <attribute name="Main-Class" value="${main-class}"/> 77 <attribute name="Class-Path" value="${libs.project}"/> 78 </manifest> 79 </jar> 80 </target> 81 82 <!-- run --> 83 <target name="run" description="Run target"> 84 <java classname ="com.linxus.main.Main"> 85 <classpath> 86 <pathelement path="${basedir}/classes/com/linxus/main"/> 87 </classpath> 88 </java> 89 </target> 90 </project>