Java 專案自動化建構與部署的示意圖

← INSIGHTS & PERSPECTIVES | 後端開發

Ant 建構與部署 Java 專案完整教學:javac、java、jar、war 任務實戰

用 Apache Ant 建構與部署 Java 專案的完整入門教學:以 build.xml 示範 javac 編譯、java 執行程式、jar 打包 jar 檔、war 打包 JavaEE 專案,一次看懂 Ant 自動化建構與部署流程。

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"%>war test for ant

Hello JSP!Hello Ant!

```

接下來編寫 `build.xml` 檔,其內容如下:

```xml

```

在 WebTest 目錄下運行 `ant` 後,就生成了 `WebTest.war` 檔了。然後可以將其放入 Web 容器(如 Tomcat)的相應目錄下(`${Tomcat安裝目錄}\webapps`)來運行該 web 項目。

延伸閱讀

常見問題

QAnt 的 default 屬性有什麼作用?

`<project>` 的 `default` 屬性指定在執行 `ant` 命令時(未帶 target 參數)要運行的預設 target。例如 `default="compile"` 就會執行 compile target,想打包 jar 時改成 `default="jar"` 即可。

QAnt 的 depends 屬性是怎麼運作的?

`depends` 定義 target 之間的依賴順序,Ant 會先執行被依賴的 target 再執行目前的 target。例如 `jar` 依賴 `run`、`run` 依賴 `compile`、`compile` 依賴 `clean`,所以執行 `ant`(default 為 jar)會依序跑 clean → compile → run → jar。

Q為什麼編譯前要先清除 build 目錄?

先刪除再重建 `build/classes` 可以確保輸出目錄是乾淨的,避免舊的 class 檔殘留造成新舊 class 混雜,導致執行結果不如預期。這就是 build.xml 中 `clean` target 的用途。

Q打好的 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