ant Hello World

潼关路边的一只野鬼發表於2024-07-04

倉庫地址

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>