问题描述
在我制作的application中,我将资源文件放置到一个名为YoutubeAudioAutodownloader-resources
的文件夹中,并确保将文件夹放置在应用程序的.jar文件旁边时该文件可以工作。
然后,当我使用jpackage
用以下cmd代码制作exe安装程序时:(由于目录安排糟糕,对脏代码很抱歉,我只想强调的部分是--type
和{{1 }}选项)
--resource-dir
我的set jh=D:\development\jdk-14\bin
set appname=YoutubeAudioAutodownloader v1.2.2
pushd %jh%
jpackage --type app-image --name "%appname%" --input "%~dp0packaging\jar" --dest "%~dp0packaging" --main-jar "YoutubeAudioAutodownloader v1.2.2.jar" --main-class "com.awidesky.YoutubeClipboardAutodownloader.Main" --resource-dir "%~dp0release.v1.2.1\YoutubeAudioAutodownloader-resources" --icon "%~dp0icon\icon.ico
pause
文件夹应该放在哪里?在我的应用程序图像文件夹的YoutubeAudioAutodownloader-resources
文件夹中?还是因为app
选项而不必做? (我不确定我是否对该选项了解正确)
解决方法
jpackage中的@public_route
参数用于更改应用程序EXE的资源,例如图标等,但听起来您实际上希望自己的类使用--resource-dir
访问本地资源。
我不认为JDK14 jpackage提供了一种方法来指定本地资源目录以添加到正在运行的jpackage EXE的类路径中。但是它确实添加了jar,因此,如果将所有资源目录与一个简单的Java类myClass.getClassLoader().getResourceAsStream("somerespath.xyz")
捆绑到jar中,则可以使用以下方式找到资源:
MyNewClass
这个新的jar需要与您的其他jar一起使用,以便使用MyNewClass.class.getClassLoader().getResourceAsStream("pathto/aresource.xyz");
进行拾取,然后每个启动器EXE --input "%~dp0packaging\jar"
的classpath字段应引用额外的资源jar。