首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Ant 建構腳本實戰:從編譯、打 JAR、打 WAR 到生成 Javadoc

     編輯:Java 程式設計入門

專案目錄結構約定

project-root/
├── src/           # 原始碼
├── lib/           # 第三方 JAR
├── classes/       # 編譯輸出
├── dist/          # JAR 輸出
├── war/           # WAR 輸出
├── doc/           # Javadoc 輸出
├── report/        # 測試報告
├── WebContent/    # Web 資源(含 WEB-INF/web.xml)
└── build.xml      # Ant 腳本

核心 build.xml 完整解析

1. 屬性與路徑定義

<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
<property name="lib.dir" value="lib"/>
<property name="dist.dir" value="dist"/>
<property name="jar.name" value="hello.jar"/>
<property name="war.name" value="hello.war"/>
<property name="WebContent" value="WebContent"/>

<path id="master-classpath">
    <fileset dir="${lib.dir}" includes="*.jar"/>
    <pathelement path="${classes.dir}"/>
</path>

2. 初始化 init

<target name="init">
    <delete dir="${lib.dir}"/> <!-- 清理舊構建 -->
    <delete dir="${dist.dir}"/>
    <delete dir="${doc.dir}"/>
    <delete dir="${war.dir}"/>
    <mkdir dir="${src.dir}"/>
    <mkdir dir="${classes.dir}"/>
    <mkdir dir="${lib.dir}"/>
    <mkdir dir="${dist.dir}"/>
    <mkdir dir="${doc.dir}"/>
    <mkdir dir="${war.dir}"/>
    <echo message="初始化完成!"/>
</target>

3. 編譯 compile

<target name="compile" depends="init" description="compile the source files">
    <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="on">
        <classpath refid="master-classpath"/>
    </javac>
</target>

includeantruntime="on" 將 Ant 自身類庫加入編譯類路徑,避免找不到系統類。

4. 打 JAR pack

<target name="pack" depends="compile" description="make jar file">
    <jar destfile="${dist.dir}/${jar.name}" basedir="${classes.dir}"/>
</target>

自動包含 classes.dir 下所有 .class 及資源檔,生成 META-INF/MANIFEST.MF。

5. 打 WAR war

<target name="war" depends="pack">
    <war destfile="${war.dir}/${war.name}" webxml="${WebContent}/WEB-INF/web.xml">
        <fileset dir="${WebContent}"/>
        <lib dir="${WebContent}/WEB-INF/lib"/>
        <classes dir="${classes.dir}"/>
    </war>
</target> 
  • fileset:JSP、HTML、CSS、JS 等靜態資源
  • lib:WEB-INF/lib 下的 JAR
  • classes:編譯好的類別

6. 生成 Javadoc doc

<target name="doc" depends="war" description="create api doc">
    <javadoc destdir="${doc.dir}" author="true" version="true" use="true" 
             windowtitle="Hello World API">
        <packageset dir="${src.dir}" defaultexcludes="yes">
            <include name="example/**"/>
        </packageset>
        <doctitle><![CDATA[<h1>Hello, World</h1>]]></doctitle>
        <bottom><![CDATA[<i>All Rights Reserved</i>]]></bottom>
        <tag name="todo" scope="all" description="Todo:"/>
    </javadoc>
</target>

執行順序與依賴關係

init → compile → pack → war → doc

命令列執行:

ant doc        # 完整構建含文檔
ant pack       # 僅打 JAR
ant war        # 打 WAR(含 JAR)

常見問題與優化

問題解決方案
編碼亂碼<javac encoding="UTF-8"/>
增量編譯慢使用 <depend> 任務或遷移 Gradle/Maven
Manifest 自定義<manifest><attribute name="Main-Class" value="com.Main"/></manifest>
排除測試代碼<exclude name="**/*Test.java"/>

現代化建議

Ant 適合簡單、舊專案維護。新專案建議採用 Maven(約定優於配置、依賴管理)或 Gradle(DSL 靈活、增量構建快),兩者均支援 Ant 任務互操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved