回顧前面兩篇提到輸出可執行JAR檔的部分,由於透過Eclipse來輸出相對容易,因此就略過,而這邊要記錄的是怎麼透過command line的方式輸出一個可執行的JAR檔,try了一下發現要輸出一個如Eclipse類似的JAR檔好像有點不簡單,如怎麼加入library及指定要編進去的class檔等!
以上一篇透過Eclipse產出的FileTransfer.jar來看,解壓縮後結構如圖一
之中有一個設定檔META-INF/MANIFEST.MF,內容如下
Manifest-Version: 1.0
Class-Path: .
Main-Class: main.Main
Class-Path指定的是目錄下第一層
Main-Class指定的是main.Main,也就是main folder下的Main.class
因此,第一層有main、service及被解壓縮過後的library org.apache.commons.codec等
上面是透過Eclipse產出的,若自己要產生一個上面可執行的JAR檔,指令要怎麼下?
先看一下原來的專案程式結構請見圖二
官網建置指令示範如下
Create jar file
jar c[v0M]f jarfile [-C dir] inputfiles [-Joption]
jar c[v0]mf manifest jarfile [-C dir] inputfiles [-Joption] [-e entrypoint]
jar c[v0M] [-C dir] inputfiles [-Joption]
jar c[v0]m manifest [-C dir] inputfiles [-Joption]
先切換到FileTransferService下的bin folder
再來指令依序如下:
> jar xvf ../lib/commons-codec-1.15.jar
擴展: META-INF/MANIFEST.MF
建立: META-INF/
建立: org/
建立: org/apache/
建立: org/apache/commons/
建立: org/apache/commons/codec/
建立: org/apache/commons/codec/binary/
建立: org/apache/commons/codec/cli/
建立: org/apache/commons/codec/digest/
建立: org/apache/commons/codec/language/
建立: org/apache/commons/codec/language/bm/
建立: org/apache/commons/codec/net/
建立: META-INF/maven/
建立: META-INF/maven/commons-codec/
建立: META-INF/maven/commons-codec/commons-codec/
....
解壓縮library內容至bin folder
最後進行打包動作
> jar cvfme ../FileTransfer.jar ../manifest.txt main.Main .
已新增資訊清單
新增: main/ (讀=0)(寫=0)(儲存 0%)
新增: main/Main.class (讀=2510)(寫=1406)(壓縮 43%)
忽略項目 META-INF/
新增: META-INF/LICENSE.txt (讀=11358)(寫=3949)(壓縮 65%)
忽略項目 META-INF/MANIFEST.MF
新增: META-INF/maven/ (讀=0)(寫=0)(儲存 0%)
新增: META-INF/maven/commons-codec/ (讀=0)(寫=0)(儲存 0%)
新增: META-INF/maven/commons-codec/commons-codec/ (讀=0)(寫=0)(儲存 0%)
新增: META-INF/maven/commons-codec/commons-codec/pom.properties (讀=60)(寫=47)(壓縮 21%)
新增: META-INF/maven/commons-codec/commons-codec/pom.xml (讀=15443)(寫=4076)(壓縮 73%)
新增: META-INF/NOTICE.txt (讀=733)(寫=383)(壓縮 47%)
...
參數說明如下:
依序為設定jar file name;指定的MANIFEST manifest.txt;entry point - main.Main;inputfiles下所有檔案(bin目錄所有內容)
檔案manifest.txt內容如下:
Class-Path: .
Main-Class: main.Main
Option說明如下:
c - Create jar file
v - 詳細的輸出說明
f - 搭配c option使用
m - 參照自己建置的manifest.txt
e - set entry point main.Main for Main-Class attribute
FileTransfer.jar解壓縮後的檔案結構如下:
+---main
| Main.class
|
+---META-INF
| MANIFEST.MF
|
\---service
Client.class
Server.class
\---org
\---apache
\---...
MANIFEST.MF內容如下:
Manifest-Version: 1.0
Class-Path: .
Created-By: 1.8.0_231 (Oracle Corporation)
Main-Class: main.Main
最後驗證輸出的JAR是否可正常work(上一篇)
> java -jar FileTransfer.jar
<<File Transfer Service>>
Start client mode -> java -jar FileTransfer.jar client [target path]
Start server mode -> java -jar FIleTransfer.jar server [share path]
留言
張貼留言