重拾 Ant 自动构建工具
2012-03-21 12:28
288 查看
第一次弄ant已经是一年多以前了,好久没用发现自己对Ant已经基本上没什么印象了
虽然想要重新拿起需要花一点时间,但毕竟我之前用过这玩意儿,耍起来那是相当的方便~
就冲着这一点,花一整天的时间来回顾我都觉得值!
花了近3个小时的时间在网上找相关资料以及亲手试验,终于是有所得
下面是我的项目结构:
![](http://hi.csdn.net/attachment/201203/19/0_1332155755RfeW.gif)
下面是我写的一个 生成文件:
[html] view
plaincopy
<!--
project 标签里面的 basedir 能够指定 ${basedir} 所表示的路径。
如果 不指定 或者指定为 “.” 的话,${basedir} 的值为 build.xml 文件所在的目录。
如果指定为 “/” 的话,则 ${basedir} 取到的是磁盘的根目录~
-->
<!--
“${basedir}/..” 表示 build.xml 文件所在目录的上一级目录~
-->
<!--
注意区分 xml 注释和 ant 注释,ant 支持 “标签注释” 和 “标签属性注释”~
-->
<!--
ant 编辑按回车的时候,很多时候会不合时宜的缩进,不要管。看不下去的时候用 command+shift+f 来调整格式即可~
-->
<!--
property 标签 value 与 location 的区别。location=${basedir}+locationValue~
-->
<!--default表示默认执行的target-->
<project name="Y3wToolkit" default="jar.execute" basedir=".">
<!-- ant 的标签注释 -->
<description>回顾 ant</description>
<!-- 1.定义不可再改变值的变量~ -->
<echo message="1.define variables~" />
<property name="projectdir" value="${basedir}" />
<property name="src" location="src" />
<property name="libs" location="libs" />
<property name="dist" value="${basedir}/dist" />
<property name="build" value="${projectdir}/build" />
<property name="args[0]" value="/Users/user/Desktop/Y3wFramework" />
<!-- 2.定义项目编译的时候, 依赖的外部 jar 包的路径 -->
<echo message="2.define external.jars.path" />
<path id="external.jars.path">
<fileset dir="${libs}">
<!-- 匹配 lib 目录下所有的外部 jar 包文件~ -->
<include name="**/*.jar" />
</fileset>
</path>
<!-- 3.准备工作,创建一些文件夹来放置即将生成的字节码文件!! -->
<target name="prepare" depends="echo">
<echo message="3.prepare" />
<!-- 如果文件夹已经存在,那么将不再创建 -->
<mkdir dir="${projectdir}/build" />
<mkdir dir="${projectdir}/dist" />
</target>
<!-- 4.1.提前处理步骤,待定~ -->
<target name="process1" depends="prepare">
<echo message="4.1.process1" />
</target>
<!-- 4.2.提前处理步骤,待定~ -->
<target name="process2">
<echo message="4.2.process2" />
</target>
<!-- 5.编译 src 目录下的所有 java 文件为 class 文件,并将生成的 class 文件及包结构复制到 build 目录 -->
<target name="compile" depends="process1,process2">
<echo message="5.compile" />
<javac fork="true" target="1.6" srcdir="${src}" destdir="${build}" debug="true">
<classpath refid="external.jars.path" />
</javac>
<echo message="compile finished!" />
</target>
<!-- 6.测试生成的 class 文件是否能正常运行~ -->
<target name="class.execute" depends="compile">
<echo message="6.execute" />
<java classname="test" classpath="${build}" />
<java classname="org.bruce.convert.encoding.EncodingConvertor" classpath="${build}">
<classpath refid="external.jars.path" />
</java>
</target>
<!-- 7.将编译好的 class 文件打包成可执行 jar 文件 -->
<target name="package2jar" depends="compile">
<echo message="7.package2jar" />
<!-- 将所依赖的外部 jar 包复制到 build/libs 目录,为下一步的打包做准备~ -->
<copy todir="${build}/libs">
<fileset dir="${libs}">
<!-- 匹配 lib 目录下所有的外部 jar 包文件~ -->
<include name="**/*.jar" />
</fileset>
</copy>
<jar destfile="${dist}/EncodingConvertor.jar" basedir="${build}">
<!-- 设置所要生成的 manifest.mf 文件的键值对~ -->
<manifest>
<attribute name="Created-By" value="Bruce Yang" />
<attribute name="Class-Path" value="libs" />
<attribute name="Main-Class" value="org.bruce.convert.encoding.EncodingConvertor" />
</manifest>
<!-- 将所依赖的外部 jar 包的 class 以及 manifest.mf 文件
抽取出来放进最终要生成的 jar 文件里面 -->
<zipfileset excludes="META-INF/*.SF" src="./libs/commons-logging-1.1.1.jar" />
</jar>
</target>
<!-- 8.测试生成的 jar 文件能够否正常运行~ -->
<target name="jar.execute" depends="package2jar">
<echo message="8.jar.execute" />
<!-- 使用1个jar文件(用jar fat打包为一个)
ant中以参数带空格的java方式运行一个jar程序。
参数jar/classname不可同时用,用jar的时候要有入口类 ,这里用的是参数jar -->
<java fork="true" failonerror="true" jar="${dist}/EncodingConvertor.jar">
<arg value="${args[0]}" />
</java>
</target>
<target name="echo">
<!--一个显示信息的标记,相信你可以查看helpdoc知道它怎么用-->
<echo message="ant 取得当前项目的名称:${ant.project.name}" />
<echo message="${src}" />
<echo message="${libs}" />
<echo message="${build}" />
<echo message="${dist}" />
<!-- 虽然src2没有定义,但不会报错,会打印${src2} -->
<echo message="${src2}" />
</target>
</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
虽然想要重新拿起需要花一点时间,但毕竟我之前用过这玩意儿,耍起来那是相当的方便~
就冲着这一点,花一整天的时间来回顾我都觉得值!
花了近3个小时的时间在网上找相关资料以及亲手试验,终于是有所得
下面是我的项目结构:
![](http://hi.csdn.net/attachment/201203/19/0_1332155755RfeW.gif)
下面是我写的一个 生成文件:
[html] view
plaincopy
<!--
project 标签里面的 basedir 能够指定 ${basedir} 所表示的路径。
如果 不指定 或者指定为 “.” 的话,${basedir} 的值为 build.xml 文件所在的目录。
如果指定为 “/” 的话,则 ${basedir} 取到的是磁盘的根目录~
-->
<!--
“${basedir}/..” 表示 build.xml 文件所在目录的上一级目录~
-->
<!--
注意区分 xml 注释和 ant 注释,ant 支持 “标签注释” 和 “标签属性注释”~
-->
<!--
ant 编辑按回车的时候,很多时候会不合时宜的缩进,不要管。看不下去的时候用 command+shift+f 来调整格式即可~
-->
<!--
property 标签 value 与 location 的区别。location=${basedir}+locationValue~
-->
<!--default表示默认执行的target-->
<project name="Y3wToolkit" default="jar.execute" basedir=".">
<!-- ant 的标签注释 -->
<description>回顾 ant</description>
<!-- 1.定义不可再改变值的变量~ -->
<echo message="1.define variables~" />
<property name="projectdir" value="${basedir}" />
<property name="src" location="src" />
<property name="libs" location="libs" />
<property name="dist" value="${basedir}/dist" />
<property name="build" value="${projectdir}/build" />
<property name="args[0]" value="/Users/user/Desktop/Y3wFramework" />
<!-- 2.定义项目编译的时候, 依赖的外部 jar 包的路径 -->
<echo message="2.define external.jars.path" />
<path id="external.jars.path">
<fileset dir="${libs}">
<!-- 匹配 lib 目录下所有的外部 jar 包文件~ -->
<include name="**/*.jar" />
</fileset>
</path>
<!-- 3.准备工作,创建一些文件夹来放置即将生成的字节码文件!! -->
<target name="prepare" depends="echo">
<echo message="3.prepare" />
<!-- 如果文件夹已经存在,那么将不再创建 -->
<mkdir dir="${projectdir}/build" />
<mkdir dir="${projectdir}/dist" />
</target>
<!-- 4.1.提前处理步骤,待定~ -->
<target name="process1" depends="prepare">
<echo message="4.1.process1" />
</target>
<!-- 4.2.提前处理步骤,待定~ -->
<target name="process2">
<echo message="4.2.process2" />
</target>
<!-- 5.编译 src 目录下的所有 java 文件为 class 文件,并将生成的 class 文件及包结构复制到 build 目录 -->
<target name="compile" depends="process1,process2">
<echo message="5.compile" />
<javac fork="true" target="1.6" srcdir="${src}" destdir="${build}" debug="true">
<classpath refid="external.jars.path" />
</javac>
<echo message="compile finished!" />
</target>
<!-- 6.测试生成的 class 文件是否能正常运行~ -->
<target name="class.execute" depends="compile">
<echo message="6.execute" />
<java classname="test" classpath="${build}" />
<java classname="org.bruce.convert.encoding.EncodingConvertor" classpath="${build}">
<classpath refid="external.jars.path" />
</java>
</target>
<!-- 7.将编译好的 class 文件打包成可执行 jar 文件 -->
<target name="package2jar" depends="compile">
<echo message="7.package2jar" />
<!-- 将所依赖的外部 jar 包复制到 build/libs 目录,为下一步的打包做准备~ -->
<copy todir="${build}/libs">
<fileset dir="${libs}">
<!-- 匹配 lib 目录下所有的外部 jar 包文件~ -->
<include name="**/*.jar" />
</fileset>
</copy>
<jar destfile="${dist}/EncodingConvertor.jar" basedir="${build}">
<!-- 设置所要生成的 manifest.mf 文件的键值对~ -->
<manifest>
<attribute name="Created-By" value="Bruce Yang" />
<attribute name="Class-Path" value="libs" />
<attribute name="Main-Class" value="org.bruce.convert.encoding.EncodingConvertor" />
</manifest>
<!-- 将所依赖的外部 jar 包的 class 以及 manifest.mf 文件
抽取出来放进最终要生成的 jar 文件里面 -->
<zipfileset excludes="META-INF/*.SF" src="./libs/commons-logging-1.1.1.jar" />
</jar>
</target>
<!-- 8.测试生成的 jar 文件能够否正常运行~ -->
<target name="jar.execute" depends="package2jar">
<echo message="8.jar.execute" />
<!-- 使用1个jar文件(用jar fat打包为一个)
ant中以参数带空格的java方式运行一个jar程序。
参数jar/classname不可同时用,用jar的时候要有入口类 ,这里用的是参数jar -->
<java fork="true" failonerror="true" jar="${dist}/EncodingConvertor.jar">
<arg value="${args[0]}" />
</java>
</target>
<target name="echo">
<!--一个显示信息的标记,相信你可以查看helpdoc知道它怎么用-->
<echo message="ant 取得当前项目的名称:${ant.project.name}" />
<echo message="${src}" />
<echo message="${libs}" />
<echo message="${build}" />
<echo message="${dist}" />
<!-- 虽然src2没有定义,但不会报错,会打印${src2} -->
<echo message="${src2}" />
</target>
</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
相关文章推荐
- 自动构建工具Ant深入剖析(一) 配置环境及初步使用
- 自动构建工具Ant深入剖析(一) 配置环境及初步使用
- 自动构建工具Ant深入剖析(四) 使用CVS及自定义任务
- 自动构建工具Ant深入剖析(二) Ant属性、目标、依赖深度详解
- 自动构建工具Ant深入剖析(三) Ant目标深度详解、使用Ant的各种任务
- 自动构建工具Ant的使用(一)
- 自动构建工具Ant的使用-笔记
- 自动构建工具Ant的使用-笔记
- 自动构建工具Ant的使用(二)
- java 自动构建工具-Ant介绍(很多企业使用的)
- 项目自动构建工具对比(Maven、Gradle、Ant)
- 【java】自动构建工具Ant的学习
- 自动构建工具Ant的使用-笔记
- 自动构建工具Ant的使用(四)
- 自动构建工具Ant深入剖析(一) 配置环境及初步使用
- 自动构建工具Ant的使用-笔记
- 自动构建工具Ant的使用(三)
- 重拾 Ant 自动构建工具
- Android编译中涉及到Ant构建工具小结
- [置顶] QEE2.1 色色修改版 - 增加多级目录模块结构以及扩展web自动构建工具