現代 Java 開發高度依賴 IDE(Eclipse、IntelliJ IDEA 等),但掌握命令行編譯、構建工具與手動運行流程,能幫助開發者深入理解構建生命周期、類加載機制與依賴管理,在排查環境問題、編寫腳本、面試考核時極具價值。本文以簡單的多類別專案為例,逐步演示 javac/java、Ant、Maven、Gradle 四種無 IDE 構建運行方式。
假設專案目錄如下:
project-root/ ├── src/ │ └── dustin/ │ └── examples/ │ ├── Parent.java │ ├── Child.java │ └── Main.java └── classes/ # 編譯輸出目錄(需預先建立)
三個類別代碼:
// Parent.java
package dustin.examples;
public class Parent {
@Override public String toString() { return "I'm the Parent."; }
}
// Child.java
package dustin.examples;
public class Child extends Parent {
@Override public String toString() { return "I'm the Child."; }
}
// Main.java
package dustin.examples;
import static java.lang.System.out;
public class Main {
private final Parent parent = new Parent();
private final Child child = new Child();
public static void main(String[] args) {
Main instance = new Main();
out.println(instance.parent);
out.println(instance.child);
}
}
# 從專案根目錄執行
javac -sourcepath src -d classes src/dustin/examples/*.java
-sourcepath src:指定源碼根目錄,編譯器據此解析包結構-d classes:指定 .class 輸出目錄(必須預先存在)java -cp classes dustin.examples.Main
# 或
java -classpath classes dustin.examples.Main
-cp/-classpath 指定類搜索路徑,最後參數為包含 main 方法的完整類名。

Ant 以 XML 定義構建流程,適合需要精細控制的場景。
<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildingSansIDE" default="run" basedir=".">
<description>Building Simple Java Applications Without An IDE</description>
<target name="compile" description="Compile the Java code.">
<javac srcdir="src" destdir="classes" debug="true" includeantruntime="false" />
</target>
<target name="run" depends="compile" description="Run the Java application.">
<java classname="dustin.examples.Main" fork="true">
<classpath>
<pathelement path="classes"/>
</classpath>
</java>
</target>
</project>
執行 ant 即可完成編譯與運行(默認目標為 run)。

Maven 採用約定優於配置,標準目錄結構為 src/main/java,本例為演示覆蓋默認配置。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>dustin.examples</groupId>
<artifactId>CompilingAndRunningWithoutIDE</artifactId>
<version>1</version>
<build>
<defaultGoal>compile</defaultGoal>
<sourceDirectory>src</sourceDirectory>
<outputDirectory>classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
</build>
</project>
mvn compile 或直接 mvn(defaultGoal 為 compile)mvn exec:java -Dexec.mainClass=dustin.examples.Main

Gradle 以 Groovy/Kotlin DSL 定義構建,兼具靈活性與約定。
apply plugin: 'java'
apply plugin: 'application'
sourceSets {
main {
java { srcDirs 'src' }
}
}
sourceSets.main.output.classesDir = file("classes")
mainClassName = "dustin.examples.Main"
defaultTasks 'compileJava', 'run'
執行 gradle 即可完成編譯與運行(默認任務為 compileJava 和 run)。

| 工具 | 適用場景 | 核心優勢 |
|---|---|---|
| javac/java | 教學驗證、極簡原型、腳本嵌入 | 零依賴、直觀透明 |
| Ant | 舊專案維護、高度自定義構建邏輯 | 完全控制、無約定約束 |
| Maven | 企業級標準化專案、依賴管理複雜 | 約定優於配置、中央倉庫生態 |
| Gradle | 現代專案、多模組、性能敏感、需要動態邏輯 | 增量構建、DSL 靈活、性能優異 |
實際開發中,建議:
javac/java 或 IDE 內建運行java -jar 或腳本啟動