簡體   English   中英

Java:使用-cp選項運行的jar文件中的啟動畫面?

[英]Java: splash screen in a jar file run with the -cp option?

是否可以將初始屏幕圖像放在jar文件中,並在命令行上使用-splash選項?

背景:我有3個具有有趣的依賴關系樹的jar文件,我要運行的主類位於“公共” jar中(它反射地調用了其他兩個jar的主類)。 因此,使用-jar命令行是不可能的。

是的,我知道您可以在清單中使用SplashScreen-Image行,但是當使用java命令行的-cp選項時,所有清單似乎都將被忽略。 我想盡可能地將資源保持在罐子中,所以我想要其中一個罐子來保存初始屏幕。 但對於路徑splash遵循“xx.jar!路徑”,或“xx.jar /路徑”似乎並沒有工作。 有可能嗎?如何?

編輯:好的,讓我再試一次。 我有三個罐子。 一個包含圖形邏輯,我們稱它為“ UI”,一個包含業務邏輯,我們稱其為“ Core”,一個包含兩者之間的通用類。 Core組件和UI組件都可以作為自己的應用程序運行,並且它們具有自己的主類,並且其jar設置為在類路徑中包括公共jar。 但是普通的jar有一個帶有main方法的類,該方法調用了兩個main類。 通用jar是兩者之間的庫,因此不應將UI或Core jar作為依賴項,因為如果單獨運行組件,則可能會缺少其中一個。

我想要的是一種在公共jar中調用主類時引用包裝在UI jar中的初始屏幕的方法。 我已經解決了使用-cp選項調用此通用jar的main的-cp 它只是沒有合適的啟動屏幕。 有可能嗎?如何? (我希望使這個問題變得籠統,不包括所有信息,而是其他信息。)

我沒有找到這樣做的理由,但是這是使其發揮作用的方法。

將環境變量_JAVA_SPLASH_JAR設置為包含初始屏幕圖像的JAR的文件系統路徑,並將_JAVA_SPLASH_FILE設置為該JAR中初始屏幕文件的名稱。 例如,在bashsh shell中,

(export _JAVA_SPLASH_JAR=app.jar; \
 export _JAVA_SPLASH_FILE=META-INF/splash.jpg; \
 java -cp app.jar com.y.app.Main )

我認為這種方法是不好的,因為環境變量未作為java啟動器接口的一部分進行記錄,並且實現更改可能會破壞啟動屏幕或整個啟動器。

使用它的解釋很脆弱。 當然,您不希望公共庫和應用程序之間有任何循環依賴。 但這與存檔結構無關。 當它對應用程序具有強大的運行時依賴關系時,為什么要從組合主類上刪除編譯時依賴關系呢?

這個“公共”主類不是公共庫的一部分。 這是另一個應用程序。 允許它對應用程序具有靜態依賴性,並使用適當的Main-ClassClass-PathSplashScreen-Image打包到一個單獨的存檔中,這樣才可以使用-jar選項啟動。 。 這樣,當您單獨部署其他應用程序時,它們的公共庫將不會包含不必要的組合應用程序。 並且,當安裝了新版本的Java時,啟動屏幕將正確顯示,而不會使啟動器崩潰。

使用-jar並指定您可以在Class-Path清單屬性中使用的任何其他jar的位置。 該類路徑上的東西不需要存在。 這仍然會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM