jar包
jar包分類
jar包分為可執(zhí)行jar包和不可執(zhí)行jar包
jar包解壓后都有一個(gè)META-INF/MANIFEST.MF文件
可執(zhí)行jar包和不可執(zhí)行jar包的區(qū)別是MANIFEST.MF文件里有主類入口配置:Main-Class: com.example.MyClass
注意MANIFEST.MF配置后的冒號后有空格
可執(zhí)行jar包,直接雙擊就可以運(yùn)行诽俯,或者同目錄下cmd中執(zhí)行命令:java -jar jar包名.jar
如何生成jar包
(1)javac編譯java文件
javac Hello.java
(2)將編譯后的Hello.class文件打成jar包
jar -cvf hello.jar Hello.class
c表示要?jiǎng)?chuàng)建一個(gè)新的jar包妇菱,v表示創(chuàng)建的過程中在控制臺輸出創(chuàng)建過程的一些信息,f表示給生成的jar包命名
(3)運(yùn)行jar包
java -jar hello.jar
這時(shí)會報(bào)如下錯(cuò)誤 hello.jar中沒有主清單屬性
添加Main-Class屬性
用壓縮軟件打開hello.jar惊畏,會發(fā)現(xiàn)里面多了一個(gè)META-INF文件夾恶耽,里面有一個(gè)MENIFEST.MF的文件,用記事本打開
1 Manifest-Version: 1.0
2 Created-By: 1.8.0_121 (Oracle Corporation)
3
在第三行的位置寫入 Main-Class: Hello (注意冒號后面有一個(gè)空格颜启,整個(gè)文件最后有一行空行)偷俭,保存
再次運(yùn)行 java -jar hello.jar ,此時(shí)成功在控制臺看到 hello 缰盏,成功
附:
1 如果有多個(gè)java文件涌萤,則在編譯的時(shí)候同時(shí)編譯,然后將多個(gè)class文件同時(shí)打包口猜,后續(xù)過程相同
2.如果多個(gè)java文件不在同一個(gè)文件夾负溪,此時(shí)需要注意,他們編譯后的class還在各自的文件夾济炎,可以
javac A.java bbb/B.java -d target
編譯到一個(gè)相同的文件夾
3.如果想加入jar,則在編譯的時(shí)候
javac -cp A.jar B.java
并且在最終生成的jar包中修改MENIFEST.MF川抡,在MENIFEST.MF文件中配置一個(gè)新屬性:Class-Path,路徑指向你需要的所有jar包,引入多個(gè)jar包须尚,中間用空格隔開
1 Manifest-Version: 1.0
2 Created-By: 1.8.0_121 (Oracle Corporation)
3 Main-Class: B
4 Class-Path: A.jar
5
4.有的時(shí)候我們是在一些集成開發(fā)環(huán)境中拷貝一些java文件崖堤,編譯出來的class文件是帶著包名的,所以要在jar包中創(chuàng)建相應(yīng)目錄耐床,把class文件移入相應(yīng)的目錄密幔,并且修改MENIFEST.MF
1 Manifest-Version: 1.0
2 Created-By: 1.8.0_121 (Oracle Corporation)
3 Main-Class: com.example.lib.Main
4 Class-Path: A.jar
5
7.想讀取jar包內(nèi)的資源文件,getClass().getResourceAsStream("a.txt")的方法讀取輸入流