// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("MainClass work well");
SubClass mycls = new SubClass();
}
}
class SubClass {
public SubClass() { System.out.println("SubClass work well"); }
}
javac HelloWorld.java → 產生 HelloWorld.class、SubClass.class。java HelloWorld 確認無誤。.class 檔案,刪除 .java 源碼。mkdir META-INF。MANIFEST.MF,內容:
Main-Class: HelloWorld(注意:冒號後有空格,檔案結尾需換行)。
jar cvfm MyApp.jar MANIFEST.MF *
c 建立新檔、v 顯示過程、f 指定輸出檔、m 引入清單檔。* 包含當前目錄所有檔案(含 META-INF/)。java -jar MyApp.jar # 輸出: # MainClass work well # SubClass work well
| 環節 | 關鍵點 |
|---|---|
| Main-Class | 指定入口類全限定名(無 .class 後綴),JVM 啟動時調用其 main()。 |
| Manifest 位置 | 打包時自動置於 META-INF/MANIFEST.MF;也可用 jar ufm 更新現有 JAR 的清單。 |
| Class-Path 屬性 | Manifest 中可聲明 Class-Path: lib/dependency.jar 引入外部依賴(相對路徑)。 |
| 多主類別 | 單一 JAR 僅能指定一個 Main-Class;多入口需多 JAR 或自定義啟動器。 |
org.apache.maven.plugins
maven-jar-plugin
com.example.HelloWorld
現代專案強烈建議使用建構工具管理打包,避免手動操作失誤。