倉庫地址
https://gitee.com/bzrj/ant-study/tree/master/ant-hello
參考資料
APACHE ANT編寫BUILD.XML的自動提示 ANT DTD
關於ant -javac的 includeAntRuntime 屬性
升級Intellij IDEA 2023.3後找回Ant構建工具
信步漫談之Ant—打包可執行的Jar包(加入第三方jar包)
執行效果
E:\gitee\bzrj\ant-study\ant-hello>dir
驅動器 E 中的卷是 文件
卷的序列號是 EDE0-BB33
E:\gitee\bzrj\ant-study\ant-hello 的目錄
2024/07/04 01:07 <DIR> .
2024/07/04 01:07 <DIR> ..
2024/07/03 23:52 <DIR> .externalToolBuilders
2024/07/04 00:07 49 .gitignore
2024/07/04 00:45 <DIR> .idea
2024/07/04 00:00 557 ant-hello.iml
2024/07/03 23:24 215,327 ant_DTD.dtd
2024/07/04 01:05 <DIR> build
2024/07/04 01:07 4,390 build.xml
2024/07/04 01:05 <DIR> dist
2024/07/03 23:30 <DIR> src
4 個檔案 220,323 位元組
7 個目錄 67,938,680,832 可用位元組
E:\gitee\bzrj\ant-study\ant-hello>ant exec
Buildfile: E:\gitee\bzrj\ant-study\ant-hello\build.xml
pre-compile:
compile:
[javac] Compiling 1 source file to E:\gitee\bzrj\ant-study\ant-hello\build\classes
exec:
[java] thresh is running...
BUILD SUCCESSFUL
Total time: 0 seconds
E:\gitee\bzrj\ant-study\ant-hello>ant
Buildfile: E:\gitee\bzrj\ant-study\ant-hello\build.xml
pre-compile:
compile:
[javac] Compiling 1 source file to E:\gitee\bzrj\ant-study\ant-hello\build\classes
archive:
[jar] Building jar: E:\gitee\bzrj\ant-study\ant-hello\dist\thresh.jar
BUILD SUCCESSFUL
Total time: 0 seconds
E:\gitee\bzrj\ant-study\ant-hello>cd dist
E:\gitee\bzrj\ant-study\ant-hello\dist>java -jar thresh.jar
thresh is running...
E:\gitee\bzrj\ant-study\ant-hello\dist>
build.xml
<?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY ant_dtd SYSTEM "ant_DTD.dtd">
]>
<project name="ant hello world" default="archive">
<!--
定義屬性
-->
<!-- 原始碼目錄 -->
<property name="src.dir" value="src"/>
<property name="src.main.dir" value="${src.dir}/main"/>
<property name="src.main.java.dir" value="${src.main.dir}/java"/>
<!-- 構建目錄 -->
<property name="build.dir" value="build"/>
<!-- 編譯目錄 -->
<property name="build.classes.dir" value="${build.dir}/classes"/>
<!-- 釋出目錄 -->
<property name="dist.dir" value="dist"/>
<!-- jar 包名稱 -->
<property name="finalName" value="thresh.jar"/>
<property name="mainclass" value="com.laolang.thresh.ThreshApplication"/>
<property name="project-version" value="0.1"/>
<!-- 一個測試 target -->
<target name="hello">
<echo>Hello World - Welcome to Apache Ant!</echo>
</target>
<!-- 列印內建屬性 -->
<target name="print-system-property">
<!-- 用於專案基礎的絕對路徑 -->
<echo>basedir:${basedir}</echo>
<!-- 用於構建檔案的絕對路徑 -->
<echo>ant.file:${ant.file}</echo>
<!-- 用於Ant的版本 -->
<echo>ant.version:${ant.version}</echo>
<!-- 它包含當前正在執行的專案的名稱 -->
<echo>ant.project.name:${ant.project.name}</echo>
<!-- 它包含當前正在執行的專案的預設目標的名稱 -->
<echo>ant.project.default-target:${ant.project.default-target}</echo>
<!-- 呼叫當前專案時的目標列表 -->
<echo>ant.project.invoked-targets:${ant.project.invoked-targets}</echo>
<!-- 擁有的JVM版本 -->
<echo>ant.java.version:${ant.java.version}</echo>
<!-- ant.jar 檔案的絕對路徑 -->
<echo>ant.core.lib:${ant.core.lib}</echo>
<!-- 包含Ant的主目錄 -->
<echo>ant.home:${ant.home}</echo>
<!-- 包含用於載入Ant的jar的目錄 -->
<echo>ant.library.dir:${ant.library.dir}</echo>
</target>
<!-- 列印自定義屬性 -->
<target name="print-custom-property">
<echo>src.dir:${src.dir}</echo>
<echo>src.main.dir:${src.main.dir}</echo>
<echo>src.main.java.dir:${src.main.java.dir}</echo>
<echo>build.dir:${build.dir}</echo>
<echo>build.classes.dir:${build.classes.dir}</echo>
<echo>dist.dir:${dist.dir}</echo>
<echo>finalName:${finalName}</echo>
</target>
<!-- 列印所有屬性,展示另一種 target 依賴關係管理方式 -->
<target name="print-property">
<antcall target="print-system-property"/>
<antcall target="print-custom-property"/>
</target>
<!-- 列印 ant dtd -->
<target name="makeantdtd">
<antstructure output="ant_DTD.dtd"/>
</target>
<!-- 預編譯,建立目錄 -->
<target name="pre-compile">
<mkdir dir="${src.dir}"/>
<mkdir dir="${src.main.dir}"/>
<mkdir dir="${src.main.java.dir}"/>
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${dist.dir}"/>
</target>
<!-- 編譯 -->
<target name="compile" depends="pre-compile">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" includeantruntime="false"/>
</target>
<!-- 執行 -->
<target name="exec" depends="compile">
<java classname="${mainclass}" classpath="${build.classes.dir}"/>
</target>
<!-- 打包 -->
<target name="archive" depends="compile">
<!-- 時間戳 -->
<tstamp>
<format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss"/>
</tstamp>
<!-- 清單檔案 -->
<manifest file="${build.dir}/MANIFEST.MF">
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Implementation-Version" value="${project-version}"/>
<attribute name="Built-Date" value="${TODAY}"/>
<attribute name="Main-Class" value="${mainclass}"/>
</manifest>
<jar destfile="${dist.dir}/${finalName}" basedir="${build.classes.dir}" manifest="${build.dir}/MANIFEST.MF"/>
</target>
<!-- 清理 -->
<target name="clean">
<delete dir="${build.dir}"/>
<delete dir="${dist.dir}"/>
</target>
</project>