→ Killercat: 這種情況多半還是用mvn或者gradle build簡單點吧.... 03/18 16:46
→ AI3767: 執行script的錯誤訊息是? 03/19 01:13
added manifest
adding: class/rank/(in = 0) (out= 0)(stored 0%)
adding: class/rank/MainRun.class(in = 5683) (out= 3133)(deflated 44%)
...
Error: Could not find or load main class MainRun
※ 編輯: obelisk0114 (47.149.227.123), 03/19/2018 06:23:41
→ ssccg: manifest中的class name要寫rank.MainRun 03/19 09:10
→ ssccg: 基本上java所有說到class name的都是指完整名稱 03/19 09:10
還是有同樣錯誤
目前結構:
class (預定放產生的 class)
rank (我的程式, main function 在 MainRun, 全部都有加 package rank;)
lib (外部 jar, 目前是 json-20180130.jar)
script
MANIFEST.MF
修改內容:
MANIFEST.MF
Class-Path: lib/json-20180130.jar
Main-Class: class.rank.MainRun
script
javac -d class -cp lib/json-20180130.jar rank/*.java
jar -cvfm rank.jar MANIFEST.MF class/* lib/*
※ 編輯: obelisk0114 (47.149.227.123), 03/19/2018 09:30:10
→ ssccg: 是rank.MainRun,沒有class. 03/19 09:38
Error: Could not find or load main class rank.MainRun
※ 編輯: obelisk0114 (47.149.227.123), 03/19/2018 09:46:22
→ ssccg: jar -cvfm rank.jar MANIFEST.MF -C class . 03/19 11:05
→ ssccg: jar檔中的相對路徑要跟package一致,要把class重新對應到 03/19 11:06
→ ssccg: jar檔中的根目錄,你可以解開jar檔確認一下 03/19 11:07
改用大大的指令 jar -cvfm rank.jar MANIFEST.MF -C class .
可以執行成功,但好像不會把 lib 裡面的 jar 包進去
將打包好的 jar 放到別的目錄就無法執行
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONArray
at rank.MainRun.main
...
Caused by: java.lang.ClassNotFoundException: org.json.JSONArray
...
※ 編輯: obelisk0114 (47.149.227.123), 03/19/2018 13:22:12
→ ssccg: jar -cvfm rank.jar MANIFEST.MF -C class . lib/* 03/19 13:41
→ ssccg: 我只是把你原本的 class/*換成-C class . (把class目錄下全 03/19 13:42
→ ssccg: 包進去且置換成根目錄),其他你原本有的還是要有啊. 03/19 13:42
放到其他目錄還是有相同錯誤, 不過已經有把那個 jar 包進去了
※ 編輯: obelisk0114 (47.149.227.123), 03/19/2018 14:27:39
→ ssccg: 看來單純把jar包進去是不行的,有些執行環境可以是因為用了 03/19 14:39
→ ssccg: 特殊的classloader,你必須把lib jar內容解開一起包到你的 03/19 14:40
→ ssccg: jar裡面,或是就一樣把lib jar也複製到你要執行的目錄 03/19 14:41