| 術語 | 含義 | 現代對應 |
|---|---|---|
| JDK | Java Development Kit,開發工具包 | JDK 17/21 (LTS),含 javac、工具、原始碼 |
| JRE | Java Runtime Environment,執行環境 | JRE 17/21,僅含 JVM + 類庫,**JDK 內建 JRE** |
| J2SE | Java 2 Platform Standard Edition (1.2~1.4 時代稱呼) | **已更名為 Java SE**,JDK 5.0 (1.5) 起棄用 J2SE 稱呼 |
| Java SE | 標準版平台規範 | JDK 實作 Java SE 規範 |
💡 下載建議:Eclipse Temurin 選擇 JDK (非 JRE),版本鎖定 LTS (17/21),作業系統對應
x64/aarch64。
# 系統變數 (Win+S → 編輯系統環境變數 → 環境變數 → 系統變數)
JAVA_HOME = C:\Java\jdk-21 # JDK 根目錄 (含 bin/lib)
PATH = %JAVA_HOME%\bin;%PATH% # 放最前面,確保優先使用此版本
# 驗證
cmd /k "echo JAVA_HOME=%JAVA_HOME% && java --version && javac --version"
⚠️ 不再需要 手動設定 CLASSPATH (含 ./dt.jar/tools.jar)。Maven/Gradle/模組系統/IDE 會自動構建類別路徑/模組路徑。手動 CLASSPATH 易造成版本衝突、類別載入器洩漏、除錯困難。
# 1. 建立專案目錄
mkdir HelloWorld && cd HelloWorld
# 2. 撰寫原始碼 (檔名必須與 public 類別名相同)
cat > HelloWorld.java << 'EOF'
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java " + System.getProperty("java.version") + "!");
}
}
EOF
# 3. 編譯 → 產生 HelloWorld.class
javac HelloWorld.java
# 4. 執行 (類別名,非檔名)
java HelloWorld
# 輸出: Hello, Java 21.0.x!
| 工具 | 時代 | 特色 | 現狀 |
|---|---|---|---|
| Ant | 2000-2010 | XML 腳本、程序式、無依賴管理、無約定目錄結構 | 舊專案維護,極少新專案採用 |
| Maven | 2004-至今 | 約定優於配置、中央倉庫、生命週期、傳遞性依賴、POM 宣告式 | **企業級主流**,穩定、生態最豐富、IDE 支援最完整 |
| Gradle | 2012-至今 | Groovy/Kotlin DSL、增量建構、依賴圖可視化、腳本可程式化、多專案強 | **新專案首選** (Android、Spring Boot、微服務)、Kotlin DSL 類型安全 |
# 1. 產生標準專案骨架
mvn archetype:generate -DgroupId=com.example -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
# 2. 專案結構
myapp/
├── pom.xml # 專案物件模型:座標、依賴、外掛、Profile
├── src/
│ ├── main/java/ # 主程式碼
│ └── test/java/ # 測試碼
# 3. 核心命令
mvn clean compile # 編譯主程式
mvn test # 執行單元測試
mvn package # 打包 JAR/WAR (target/myapp-1.0-SNAPSHOT.jar)
mvn install # 安裝至本地倉庫 (~/.m2/repository)
mvn dependency:tree # 顯示依賴樹
mvn help:effective-pom # 顯示合併後完整 POM
# 1. 初始化專案
gradle init --type java-application --dsl kotlin --name myapp --package com.example
# 2. 核心配置 build.gradle.kts
plugins {
id("application")
id("org.jetbrains.kotlin.jvm") version "1.9.20"
}
application { mainClass.set("com.example.Main") }
repositories { mavenCentral() }
dependencies {
implementation("org.slf4j:slf4j-api:2.0.13")
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}
# 3. 核心命令
./gradlew build # 編譯、測試、打包
./gradlew run # 執行應用
./gradlew dependencies # 依賴報告
./gradlew help --all-task # 列出所有任務
| IDE | 推薦指數 | 核心優勢 | 避坑提醒 |
|---|---|---|---|
| IntelliJ IDEA Community | ⭐⭐⭐⭐⭐ | 免費、智能補全、重構、除錯、Maven/Gradle/Git 整合、插件豐富 | 無 Spring/Jakarta EE/資料庫/HTTP Client/K8s 深度支援 (需 Ultimate) |
| IntelliJ IDEA Ultimate | ⭐⭐⭐⭐⭐ | 全棧企業開發、框架深度支援、程式碼品質、團隊協作、遠端開發 | 付費訂閱、記憶體佔用較大 (建議 16GB+ RAM) |
| Eclipse IDE | ⭐⭐⭐ | 免費、模組化、RCP、大型專案記憶體管理、Jakarta EE 專案 | UI 舊、索引慢、配置繁瑣、效能不如 IDEA |
| VS Code + Java Extension Pack | ⭐⭐⭐⭐ | 輕量、多語言、遠端開發原生、Git 整合優、啟動快 | 重構/除錯/靜態分析深度不足、大型專案需調優 |
| NetBeans / Apache NetBeans | ⭐⭐⭐ | 視覺化 GUI 建構器、Jakarta EE 支援、免費 | 社群小、啟動慢、記憶體高 |
⚠️ 新手鐵律:前 2 週禁止用 IDE 智能補全/自動 Import/重構。手寫
javac/java/mvn/gradle指令,理解建構生命週期、類別路徑、模組路徑、輸出目錄結構。**只有理解底層機制,才能駕馭 IDE 排查環境問題**。
| 伺服器 | 定位 | 支援規範 | 授權/成本 | 推薦場景 |
|---|---|---|---|---|
| Apache Tomcat | Servlet/JSP 容器 | Servlet 6.0, JSP 3.1, WebSocket, JASPIC | Apache 2.0 免費 | Spring Boot 內嵌、微服務、中小型 Web、雲原生首選 |
| Jetty | Servlet 容器/HTTP 伺服器 | Servlet 6.0, HTTP/2, WebSocket, JMX | Apache 2.0 / EPL 免費 | 嵌入式、高併發、低延遲、gRPC/HTTP/2 優先 |
| Undertow | 高效能非阻塞伺服器 | Servlet 6.0, WebSocket, HTTP/2, 嵌入式優先 | Apache 2.0 免費 | Quarkus/WildFly 內嵌、極高併發、反應式 |
| WildFly (JBoss EAP 上游) | Jakarta EE 完整實作 | Jakarta EE 10 (全套: EJB, JPA, CDI, JTA, JMS, Security, Batch, JSON-B...) | LGPL 免費 / EAP 訂閱商業支援 | 傳統企業級應用、EJB/CDI/JTA 需求、遷移舊 JBoss 專案 |
| GlassFish / Payara | Jakarta EE 參考實作 | Jakarta EE 10 完整 | EPL+GPLv2 免費 / Payara 訂閱支援 | 規範相容性測試、教學、標準化部署 |
| WebLogic / WebSphere | 商業級應用伺服器 | Jakarta EE / Java EE 完整 + 廠商擴展 | 商業授權 (高昂) | 大型金融/電信/政府核心系統、廠商支援 SLA 需求 |
JAVA_HOME/PATH 配置、java --version 正常mvnw/gradlew)user.name/user.email/core.autocrlf=input/init.defaultBranch=mainSpotless 外掛自動格式化SpotBugs/PMD/Checkstyle 整合建構流程javadoc + AsciiDoc (Architecture Decision Records) + OpenAPI/Swagger (REST API)Dockerfile 多階段建構、.dockerignore、非 root 用戶、distroless 基底映像「環境是生產力的基礎設施。」花半天建立**標準化、可重現、可版控**的開發環境,能省下未來無數小時的「在我機器上能跑」扯皮與環境排查。專案根目錄的
.sdkmanrc/.tool-versions/pom.xml/build.gradle.kts就是環境的源碼定義,團隊成員 clone 即用,零口頭傳承。