[問題] java 在 linux 上編譯為 jar 並執行

作者: obelisk0114 (追風箏的孩子)   2018-03-18 14:13:05
之前都用 IDE 解決,現在突然需要用 jdk 編譯
我有三個目錄:
lib (放其他需要引用的 jar), 目前有 json-20180130.jar
rank (我的程式 package)
class (之後放產生的 class)
main function 在 MainRun.java
需要引用其他 jar 的程式引用: import org.json.*;
我編寫的 MANIFEST.MF (放在相同目錄) 和執行 script 有錯誤而執行失敗
這是 MANIFEST.MF 的內容:
Manifest-Version: 1.0
Class-Path: . lib/json-20180130.jar
Main-Class: MainRun
這是 script 的內容:
javac -d class -cp ".:./lib/json-20180130.jar" rank/*.java
jar -cvfm rank.jar MANIFEST.MF class/*
java -jar rank.jar
請各位大大幫忙看一下哪邊寫錯 ?
作者: Killercat (殺人貓™)   2018-03-18 16:46:00
這種情況多半還是用mvn或者gradle build簡單點吧....
作者: AI3767 (AIIA)   2018-03-19 01:13:00
執行script的錯誤訊息是?
作者: ssccg (23)   2018-03-19 09:10:00
manifest中的class name要寫rank.MainRun基本上java所有說到class name的都是指完整名稱是rank.MainRun,沒有class.jar -cvfm rank.jar MANIFEST.MF -C class .jar檔中的相對路徑要跟package一致,要把class重新對應到jar檔中的根目錄,你可以解開jar檔確認一下jar -cvfm rank.jar MANIFEST.MF -C class . lib/*我只是把你原本的 class/*換成-C class . (把class目錄下全包進去且置換成根目錄),其他你原本有的還是要有啊.看來單純把jar包進去是不行的,有些執行環境可以是因為用了特殊的classloader,你必須把lib jar內容解開一起包到你的jar裡面,或是就一樣把lib jar也複製到你要執行的目錄

Links booklink

Contact Us: admin [ a t ] ucptt.com