【发布时间】:2021-09-11 04:13:27
【问题描述】:
所以我刚刚让 jpackage 与一个基本的测试程序一起工作。我遇到了一个问题,该问题基本上将决定这个系统是否可以应用到实际项目中。
为了进行设置,Java 程序的结构如下:
rootDirectory
-src folder
-res folder
程序从这个根目录运行。我在运行时需要的程序文件位于 res 文件夹中。因此,该程序将执行类似File f = new File("res/file_i_need.png"); 的操作。
我将它导出为 JAR,现在我用 jpackage 打包它。安装程序已制作,我安装程序。生成的文件夹结构如下:
rootDirectory
-app folder
-res folder
-program.jar
-runtime folder
-program.exe
所以当你运行程序的时候,突然File f = new File("res/file_i_need.png");不再起作用了,因为新的rootDirectory已经把res文件夹埋在了app文件夹中了。
有没有办法配置 jpackage 将 res 文件夹放在根目录中,或者将其设置为 app 文件夹用作根目录的位置,或者这是你刚刚卡住的东西?
澄清一下,以下不会适用于这个特定的用例:
- 将资源存储在 JAR 本身中
- 在其他 JAR 中存储资源
重点是用户可以自己轻松地编辑/调整 res 文件夹中的文件。
如果 jpackage 无法处理这种情况,欢迎使用替代方案。
感谢您的宝贵时间!
【问题讨论】:
-
为什么不能使用路径
app-folder/res/file_i_need? -
问题是这个程序已经用 res/file_i_need 构建了,因为它在 eclipse 中是这样工作的。 app-folder 是 jpackage 在打包过程中自动添加的。除了可能试图以一种期望工作目录不匹配的方式进行破解之外,没有办法在代码本身中真正考虑到它。
-
使用系统属性为
res文件夹提供前缀,您只能在从 jpacked 版本运行时设置(我想 jpackage 允许您指定系统属性?) -
您能详细说明一下吗?也许将其添加为问题的潜在答案。
-
正如最初的帖子中提到的,在这种情况下,使用 getResourceAsStream/将这些资源包含在 JAR 本身中是不可能的。用户需要轻松访问它们。本文 (docs.oracle.com/javase/10/deploy/…) 中的这张图片 (docs.oracle.com/javase/10/deploy/img/bundle_file_struc.png) 实际上显示了它的外观。唯一的问题是exe在运行时弄乱了根目录应该是什么。