Ant 可以代替使用 `javac`、`java` 和 `jar` 等命令來執行 Java 操作,從而達到輕鬆的構建和部署 Java 專案的目的。這篇文章用四個由淺入深的例子,示範如何用一個 `build.xml` 完成編譯、執行、打 jar 包到打 war 包的完整建構部署流程。
如何用 Ant 的 javac 任務編譯 Java 程式?
Ant 的 `javac` 任務用於實現編譯 Java 程式的功能。下面來看一個簡單的例子:首先建立名為 JAVATestPro 的 Java 項目,建立 `src` 目錄為源代碼目錄,在 `src` 目錄下建立 `HelloWorld.java` 這個類檔,內容如下:
```java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
```
同時在 JAVATestPro 項目的根目錄下建立 `build.xml` 檔,在該檔中編譯 `src` 目錄下的 Java 檔,並將編譯後的 class 檔放入 `build/classes` 目錄中。整個項目的目錄結構如下:
```
JAVATestPro
├── src
├── build
│ └── classes
└── build.xml
```
在編譯前,需先清除 classes 目錄,`build.xml` 的內容如下:
```xml
```
在項目根目錄執行 `ant` 命令後,可在該目錄下發現新生成的 `build/classes` 子目錄,編譯後生成的 `HelloWorld.class` 檔就在該目錄下。
如何用 Ant 的 java 任務執行程式?
Ant 中可以使用 `java` 任務實現運行 Java 程式的功能。可以在上面的 `build.xml` 基礎上做修改來實現:
```xml
```
把 `project` 的 `default` 屬性改為 `run`,`run` 這個 target 依賴 `compile`,所以 Ant 會先編譯再執行。接著執行 `ant`,就可以在主控台看見輸出:`[java] hello world!`。
如何用 Ant 的 jar 任務打包 jar 檔?
還可以在上例的基礎上更進一步,來生成 jar 包。在 `run` 這個 target 下再加上一個 `jar` target:
```xml
```
其中,`project` 的 `default` 屬性應設為 `jar`。Ant 運行完畢後,可看到在項目的根目錄下生成了一個 `helloworld.jar` 的 jar 包。可透過運行以下命令來執行該 jar 包:
```bash
java -jar helloworld.jar
```
如何用 Ant 的 war 任務打包 JavaEE 專案?
建立一個 JavaEE 項目,其中 `src` 為 Java 源代碼目錄,`WebContent` 為各 jsp 存放目錄,`lib` 為項目引用的包的目錄。在 WebTest 項目目錄下建立 `build.xml` 檔,該檔為該工程的 Ant 構建檔。項目目錄結構如下:
```
WebTest
├── src
├── build
│ └── classes
├── WebContent
│ ├── META-INF
│ │ └── MANIFEST.MF
│ └── WEB-INF
│ ├── lib
│ ├── classes
│ └── HelloJSP.jsp
└── build.xml
```
我可以在 `src` 目錄下放入前面例子中開發的 `HelloWorld.java` 檔,並在 `WebContent` 下建立 `HelloJSP.jsp` 檔,其內容很簡單,就是輸出 Hello 資訊,代碼如下所示:
```jsp
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>Hello JSP!Hello Ant!
```
接下來編寫 `build.xml` 檔,其內容如下:
```xml
```
在 WebTest 目錄下運行 `ant` 後,就生成了 `WebTest.war` 檔了。然後可以將其放入 Web 容器(如 Tomcat)的相應目錄下(`${Tomcat安裝目錄}\webapps`)來運行該 web 項目。
延伸閱讀
- 利用 Ant 構建和部署 Java 專案:同樣聚焦 Ant、Java,可接著比較不同情境的做法。
- Apache Ant 常用命令整理:copy、delete、mkdir、move、echo 用法範例:同樣聚焦 Ant、Java,可接著比較不同情境的做法。
- Ant 建構腳本編寫入門:project、target、property 三大關鍵元素:同樣聚焦 Ant、Java,可接著比較不同情境的做法。
常見問題
Ant 的 default 屬性有什麼作用?
`<project>` 的 `default` 屬性指定在執行 `ant` 命令時(未帶 target 參數)要運行的預設 target。例如 `default="compile"` 就會執行 compile target,想打包 jar 時改成 `default="jar"` 即可。
Ant 的 depends 屬性是怎麼運作的?
`depends` 定義 target 之間的依賴順序,Ant 會先執行被依賴的 target 再執行目前的 target。例如 `jar` 依賴 `run`、`run` 依賴 `compile`、`compile` 依賴 `clean`,所以執行 `ant`(default 為 jar)會依序跑 clean → compile → run → jar。
為什麼編譯前要先清除 build 目錄?
先刪除再重建 `build/classes` 可以確保輸出目錄是乾淨的,避免舊的 class 檔殘留造成新舊 class 混雜,導致執行結果不如預期。這就是 build.xml 中 `clean` target 的用途。
打好的 war 檔要怎麼部署?
把生成的 `WebTest.war` 放入 Web 容器(如 Tomcat)的 `webapps` 目錄下,Tomcat 會自動解壓並部署該 web 項目,之後即可透過瀏覽器存取。
參考資料
最後更新
2026-08-28(原文發布於 2013-08-01,本文保留原始筆記內容並補上 GEO 結構。)
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2013-08-01
