重拾 Ant 自动构建工具

第一次弄ant已经是一年多以前了,好久没用发现自己对Ant已经基本上没什么印象了

虽然想要重新拿起需要花一点时间,但毕竟我之前用过这玩意儿,耍起来那是相当的方便~

就冲着这一点,花一整天的时间来回顾我都觉得值!

花了近3个小时的时间在网上找相关资料以及亲手试验,终于是有所得

下面是我的项目结构:


下面是我写的一个 生成文件:

[html] view plaincopy
  1. <!--   
  2. project 标签里面的 basedir 能够指定 ${basedir} 所表示的路径。  
  3. 如果 不指定 或者指定为 “.” 的话,${basedir} 的值为 build.xml 文件所在的目录。  
  4. 如果指定为 “/” 的话,则 ${basedir} 取到的是磁盘的根目录~  
  5. -->  
  6. <!-- 
  7.  “${basedir}/..”  表示 build.xml 文件所在目录的上一级目录~ 
  8. -->  
  9. <!-- 
  10. 注意区分 xml 注释和 ant 注释,ant 支持 “标签注释” 和 “标签属性注释”~ 
  11. -->  
  12. <!-- 
  13. ant 编辑按回车的时候,很多时候会不合时宜的缩进,不要管。看不下去的时候用 command+shift+f 来调整格式即可~ 
  14. -->  
  15. <!-- 
  16. property 标签 value 与 location 的区别。location=${basedir}+locationValue~ 
  17. -->  
  18. <!--default表示默认执行的target-->  
  19. <project name="Y3wToolkit" default="jar.execute" basedir=".">  
  20.     <!-- ant 的标签注释 -->  
  21.     <description>回顾 ant</description>  
  22.   
  23.     <!-- 1.定义不可再改变值的变量~ -->  
  24.     <echo message="1.define variables~" />  
  25.     <property name="projectdir" value="${basedir}" />  
  26.     <property name="src" location="src" />  
  27.     <property name="libs" location="libs" />  
  28.     <property name="dist" value="${basedir}/dist" />  
  29.     <property name="build" value="${projectdir}/build" />  
  30.     <property name="args[0]" value="/Users/user/Desktop/Y3wFramework" />  
  31.   
  32.     <!-- 2.定义项目编译的时候, 依赖的外部 jar 包的路径 -->  
  33.     <echo message="2.define external.jars.path" />  
  34.     <path id="external.jars.path">  
  35.         <fileset dir="${libs}">  
  36.             <!-- 匹配 lib 目录下所有的外部 jar 包文件~ -->  
  37.             <include name="**/*.jar" />  
  38.         </fileset>  
  39.     </path>  
  40.   
  41.   
  42.     <!-- 3.准备工作,创建一些文件夹来放置即将生成的字节码文件!! -->  
  43.     <target name="prepare" depends="echo">  
  44.         <echo message="3.prepare" />  
  45.         <!-- 如果文件夹已经存在,那么将不再创建 -->  
  46.         <mkdir dir="${projectdir}/build" />  
  47.         <mkdir dir="${projectdir}/dist" />  
  48.     </target>  
  49.   
  50.   
  51.     <!-- 4.1.提前处理步骤,待定~ -->  
  52.     <target name="process1" depends="prepare">  
  53.         <echo message="4.1.process1" />  
  54.     </target>  
  55.   
  56.   
  57.     <!-- 4.2.提前处理步骤,待定~ -->  
  58.     <target name="process2">  
  59.         <echo message="4.2.process2" />  
  60.     </target>  
  61.   
  62.   
  63.     <!-- 5.编译 src 目录下的所有 java 文件为 class 文件,并将生成的 class 文件及包结构复制到 build 目录 -->  
  64.     <target name="compile" depends="process1,process2">  
  65.         <echo message="5.compile" />  
  66.         <javac fork="true" target="1.6" srcdir="${src}" destdir="${build}" debug="true">  
  67.             <classpath refid="external.jars.path" />  
  68.         </javac>  
  69.         <echo message="compile finished!" />  
  70.     </target>  
  71.   
  72.     <!-- 6.测试生成的 class 文件是否能正常运行~ -->  
  73.     <target name="class.execute" depends="compile">  
  74.         <echo message="6.execute" />  
  75.         <java classname="test" classpath="${build}" />  
  76.         <java classname="org.bruce.convert.encoding.EncodingConvertor" classpath="${build}">  
  77.             <classpath refid="external.jars.path" />  
  78.         </java>  
  79.     </target>  
  80.   
  81.     <!-- 7.将编译好的 class 文件打包成可执行 jar 文件 -->  
  82.     <target name="package2jar" depends="compile">  
  83.         <echo message="7.package2jar" />  
  84.         <!-- 将所依赖的外部 jar 包复制到 build/libs 目录,为下一步的打包做准备~ -->  
  85.         <copy todir="${build}/libs">  
  86.             <fileset dir="${libs}">  
  87.                 <!-- 匹配 lib 目录下所有的外部 jar 包文件~ -->  
  88.                 <include name="**/*.jar" />  
  89.             </fileset>  
  90.         </copy>  
  91.         <jar destfile="${dist}/EncodingConvertor.jar" basedir="${build}">  
  92.             <!-- 设置所要生成的 manifest.mf 文件的键值对~ -->  
  93.             <manifest>  
  94.                 <attribute name="Created-By" value="Bruce Yang" />  
  95.                 <attribute name="Class-Path" value="libs" />  
  96.                 <attribute name="Main-Class" value="org.bruce.convert.encoding.EncodingConvertor" />  
  97.             </manifest>  
  98.             <!-- 将所依赖的外部 jar 包的 class 以及 manifest.mf 文件  
  99.                 抽取出来放进最终要生成的 jar 文件里面 -->  
  100.             <zipfileset excludes="META-INF/*.SF" src="./libs/commons-logging-1.1.1.jar" />  
  101.         </jar>  
  102.     </target>  
  103.   
  104.     <!-- 8.测试生成的 jar 文件能够否正常运行~ -->  
  105.     <target name="jar.execute" depends="package2jar">  
  106.         <echo message="8.jar.execute" />  
  107.         <!-- 使用1个jar文件(用jar fat打包为一个)  
  108.            ant中以参数带空格的java方式运行一个jar程序。  
  109.            参数jar/classname不可同时用,用jar的时候要有入口类 ,这里用的是参数jar -->  
  110.         <java fork="true" failonerror="true" jar="${dist}/EncodingConvertor.jar">  
  111.             <arg value="${args[0]}" />  
  112.         </java>  
  113.     </target>  
  114.   
  115.     <target name="echo">  
  116.         <!--一个显示信息的标记,相信你可以查看helpdoc知道它怎么用-->  
  117.         <echo message="ant 取得当前项目的名称:${ant.project.name}" />  
  118.         <echo message="${src}" />  
  119.         <echo message="${libs}" />  
  120.         <echo message="${build}" />  
  121.         <echo message="${dist}" />  
  122.         <!-- 虽然src2没有定义,但不会报错,会打印${src2} -->  
  123.         <echo message="${src2}" />  
  124.     </target>  
  125. </project>  

下面是 ant 执行过程中的控制台输出

Buildfile: /Users/user/Projects/Eclipse/workspace1/Y3wTookit/build.xml

     [echo] 1.define variables~

     [echo] 2.define external.jars.path

echo:

     [echo] ant 取得当前项目的名称:Y3wToolkit

     [echo] /Users/user/Projects/Eclipse/workspace1/Y3wTookit/src

     [echo] /Users/user/Projects/Eclipse/workspace1/Y3wTookit/libs

     [echo] /Users/user/Projects/Eclipse/workspace1/Y3wTookit/build

     [echo] /Users/user/Projects/Eclipse/workspace1/Y3wTookit/dist

     [echo] ${src2}

prepare:

     [echo] 3.prepare

process1:

     [echo] 4.1.process1

process2:

     [echo] 4.2.process2

compile:

     [echo] 5.compile

    [javac] Compiling 1 source file to /Users/user/Projects/Eclipse/workspace1/Y3wTookit/build

     [echo] compile finished!

package2jar:

     [echo] 7.package2jar

      [jar] Building jar: /Users/user/Projects/Eclipse/workspace1/Y3wTookit/dist/EncodingConvertor.jar

jar.execute:

     [echo] 8.jar.execute

     [java] ---- The parameter used is passed in(通过参数传入的)! ----

     [java] 输入项目文件夹为 "文件夹"!

     [java] 该文件夹的大小为: 14734601 bytes

     [java] 该文件夹的大小为: 14.052011 MB

     [java] 该文件夹的子文件数目为(不包含文件夹): 476

     [java] 该文件夹的子文件数目为(包含文件夹): 646

     [java] MyPDF.java

     [java] BubbleSort.java

     [java] HeapSort.java

     [java] InsertSort.java

     [java] MergerSort.java

     [java] QuickSort.java

     [java] SelectionSort.java

     [java] SequenceQuery.java

     [java] AutomateByRobot.java

     [java] CodeCleaner.java

     [java] CppProjectCleaner.java

     [java] CutLineHeadUsage.java

     [java] RemoveAllEmptyLinesUsage.java

     [java] JarDir.java

     [java] JarRead.java

     [java] ZipUtil.java

     [java] PrefsDemo.java

     [java] Registery.java

     [java] ConfigMannager.java

     [java] PropManager.java

     [java] String8Xml.java

     [java] DES_Decrypt.java

     [java] DES_Encrypt.java

     [java] DES_GenKey.java

     [java] IDesUtil.java

     [java] IDesUtilExt.java

     [java] IDesUtilExtImpl.java

     [java] IDesUtilUsage.java

     [java] IDesUtilUsageII.java

     [java] RSA_Decrypt.java

     [java] RSA_Encrypt.java

     [java] RSA_GenKey.java

     [java] IRsaUtil.java

     [java] IRsaUtilExt.java

     [java] IRsaUtilExtImpl.java

     [java] IRsaUtilUsage.java

     [java] Test.java

     [java] Copy.java

     [java] CopyBinaryFile.java

     [java] ObjectIO.java

     [java] TestSequenceInputStream.java

     [java] ITreeFile.java

     [java] ITreeFileImpl.java

     [java] ListDirsAndFiles.java

     [java] ListOnlyFile.java

     [java] GetFilePathFromDropAction.java

     [java] HtmlDemo.java

     [java] JFrameIcon.java

     [java] JImagePane.java

     [java] JLabelMarquee.java

     [java] JLabelTime.java

     [java] ListenerAndRunnable.java

     [java] TabbedPaneDemo.java

     [java] TestEvent.java

     [java] UserTipDialog.java

     [java] ImageJPanel.java

     [java] JButtonBlue.java

     [java] JButtonGreen.java

     [java] JButtonSound.java

     [java] JTableBgImg.java

     [java] Clock.java

     [java] Drawer.java

     [java] DrawGraphics.java

     [java] FunctionChart.java

     [java] FunnyWindow.java

     [java] GuiCamera.java

     [java] TaskList.java

     [java] TaskListCon.java

     [java] yaoketing111.java

     [java] BaseJFrame.java

     [java] BaseJFrameDerived.java

     [java] MyTextArea.java

     [java] AntiliasShapedFrame.java

     [java] Balloon.java

     [java] BalloonLink.java

     [java] BrokenLink.java

     [java] Ground.java

     [java] InvisibleLink.java

     [java] MainUI.java

     [java] Sky.java

     [java] SwingIsKnife.java

     [java] TanslucentJButtonDemo.java

     [java] TranslucentFrameDemo.java

     [java] UnregularWindow.java

     [java] ChangeImageSize.java

     [java] CutImage.java

     [java] ImageUtils.java

     [java] ReadImage3Methods.java

     [java] TestImageIO.java

     [java] TestReadImage.java

     [java] IntegerDocument.java

     [java] NumericInput.java

     [java] NumericVerifier.java

     [java] CheckMyMailBox.java

     [java] ReceiveEmail.java

     [java] SendHTMLMail.java

     [java] SendMail.java

     [java] SendMailWithAttchment.java

     [java] SimplifiedSendMail.java

     [java] SimplifiedSendMail_Yeah.java

     [java] ViewEmailAll.java

     [java] CheckMyMailBox.java

     [java] GetAddressViaMail.java

     [java] NewMail.java

     [java] NewMailFetcher.java

     [java] NewMailFetcherEx.java

     [java] NewMailFetcherEx1.java

     [java] NewMailFetcherEx2.java

     [java] ReciveIMAPMail.java

     [java] SendHTMLMail.java

     [java] SendIPAddress.java

     [java] SendMail.java

     [java] SendMailWithAttchment.java

     [java] SimplifiedSendMail_Yeah.java

     [java] TestQueue.java

     [java] ViewEmailAll.java

     [java] Base64Security.java

     [java] Md5Builder.java

     [java] Md5DigestUtil.java

     [java] PasswordSecurity.java

     [java] ShowSystemDefaultEncoding.java

     [java] CreateExcel.java

     [java] MyExcel.java

     [java] MyExcelTest.java

     [java] ReadExcel.java

     [java] UpdateExcel.java

     [java] GetHardwareInfoTest.java

     [java] GetMacAddr.java

     [java] HDUtil.java

     [java] GetAllSystemProperties.java

     [java] GetSystemProperties.java

     [java] AudioPlayer.java

     [java] AudioPlayerDerived.java

     [java] AudioPlayerEx.java

     [java] ReceiveThread.java

     [java] SendThread.java

     [java] T1.java

     [java] T2.java

     [java] TestOnlineVoice.java

     [java] IColor.java

     [java] IFrequentlyUsedSQL.java

     [java] StaticValue.java

     [java] AppendString2Txt.java

     [java] SessionLabel.java

     [java] TestCutString.java

     [java] TestSubstring.java

     [java] StopThread.java

     [java] ByteUtil.java

     [java] CmdExec.java

     [java] DecompileUtil.java

     [java] FileCopyUtil.java

     [java] FileUtil.java

     [java] HotkeyUtil.java

     [java] IPTimeStamp.java

     [java] OracleDBUtil.java

     [java] Pinyin.java

     [java] PositionAdjustUtil.java

     [java] RGB2YUV.java

     [java] TimeUtil.java

     [java] ParseXMLWithDOM.java

     [java] ParseXMLWithDOM2.java

     [java] ReadXMLFile.java

     [java] ReadXMLFile2.java

     [java] javaFileCount = 163

     [java] ---- Convert  Successfully!!! ----

BUILD SUCCESSFUL

Total time: 3 seconds


posted on 2012-03-21 12:28  yang3wei  阅读(284)  评论(0编辑  收藏  举报