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

Java 命令行編譯、運行與打包 JAR 完整實戰:從 HelloWorld 到多模塊項目

     編輯:Java 相關知識

基礎:單文件編譯運行

> javac Hello.java          # 生成 Hello.class
> java Hello                # 輸出 Hello world

帶包結構編譯到指定目錄

項目結構:
ahellodemo/
  src/
    com/whty/hello/Hello.java
  classes/                  # 輸出目錄 (需手動創建)

> cd ahellodemo
> javac -d ./classes ./src/com/whty/hello/Hello.java
# 生成 classes/com/whty/hello/Hello.class
  • -d:指定 class 文件輸出根目錄,自動創建包目錄結構
  • 源文件路徑可用通配符:./src/com/whty/hello/*.java

運行帶包類

> cd classes
> java com.whty.hello.Hello
# 輸出 Hello world
  • 類路徑 (-cp) 默認為當前目錄,需在包根目錄下用全限定名運行

打包可執行 JAR

1. 編寫 MANIFEST.MF

Manifest-Version: 1.0
Main-Class: com.whty.hello.Hello
Class-Path: .
  • 冒號後必須有一個空格
  • Main-Class:入口類全限定名
  • Class-Path:依賴 jar 相對路徑,多個用空格分隔

2. 打包命令

> cd classes
> jar -cvfm hello.jar MANIFEST.MF com
# c:創建 v:顯示過程 f:指定文件 m:引入清單

3. 運行 JAR

> java -jar hello.jar
# 輸出 Hello world

進階:多模塊項目與依賴管理

項目結構

myapp/
  lib/                    # 第三方 jar
    util.jar
  src/
    com/app/Main.java
    com/app/service/Service.java
  classes/                # 編譯輸出
  dist/                   # 產出目錄

編譯 (引用外部 jar)

> javac -d ./classes -cp "./lib/*" ./src/com/app/*.java ./src/com/app/service/*.java

打包 (包含依賴)

MANIFEST.MF:
Manifest-Version: 1.0
Main-Class: com.app.Main
Class-Path: lib/util.jar
> cd classes
> jar -cvfm ../dist/app.jar ../MANIFEST.MF com
> cp -r ../lib ../dist/   # 複製依賴到發布目錄

運行

> cd dist
> java -jar app.jar

常用參數速查表

命令參數說明
javac-dclass 輸出目錄
javac-cp / -classpath類路徑 (jar/目錄,分隔符 ; Windows, : Linux/Mac)
javac-sourcepath源文件搜索路徑
javac-encoding源文件編碼 (建議 UTF-8)
java-cp運行時類路徑
java-jar運行可執行 jar (忽略 -cp,以 Manifest.Class-Path 為準)
java-Dname=value系統屬性
jarc/v/f/m/t/u/x創建/顯示/文件/清單/列表/更新/解壓
jar-C dir切換目錄後操作 (打包多目錄)

實戰避坑指南

  1. 編碼統一 UTF-8:javac -encoding UTF-8,避免中文亂碼
  2. 類路徑分隔符:Windows 分號 ;,Linux/Mac 冒號 :
  3. -jar 模式下 -cp 無效:依賴必須寫在 Class-Path,且為相對路徑
  4. Manifest 格式嚴格:每行 ≤ 72 字節,屬性冒號後一空格,文件以換行符結尾
  5. 模塊化 (Java 9+):涉及 module-info.java 需用 --module-path、--module,建議改用 Maven/Gradle

總結

命令行構建是理解 Java 構建本質的基石。核心口訣:

  1. javac -d output -cp deps src → 編譯
  2. java -cp output MainClass → 運行類
  3. jar -cvfm app.jar MANIFEST.MF -C output . → 打包
  4. java -jar app.jar → 運行包

實際項目強烈建議使用 Maven/Gradle:依賴傳遞、多模塊、生命周期、插件生態完善,命令行僅作為調試、排查、極簡環境下的備選手段。

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