繁体   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