【问题标题】:Problems with JPackage due to different path structure between Windows and Linux由于 Windows 和 Linux 之间的路径结构不同导致的 JPackage 问题
【发布时间】:2020-07-03 17:22:42
【问题描述】:

在 Windows 上,我刚刚将我的应用程序安装程序从 Izpack 转换为 JPackage,由于 JPackage 创建的结构,我必须进行一些代码更改以允许我的应用程序找到各种配置文件,基本上它们在第一次启动时从 app 文件夹复制到 C:\Users\Username\Appdata.... (但比这更复杂一些) .

我现在在 Linux 上使用 JPackage,应用程序将配置文件从应用程序复制到 $HOME/.appname。然而,虽然在 Windows 上 app 是相对于 Linux 启动器的子文件夹,但它现在位于 ../lib/app 中,因此代码不起作用

所以我必须进行一些特定于 linux 的更改,但这让我想知道我在这里做错了什么才能让我进行这些更改?

【问题讨论】:

    标签: java linux java-14 jpackage


    【解决方案1】:

    加载配置文件的一种方法是使用类加载器:文件与应用程序的其余部分一起打包在一个 jar 中,您可以将它们作为流加载,而不是作为文件加载:

        Properties properties = new Properties();
        InputStream stream = YourApplication.class.getResourceAsStream("/resources/conf.properties");
        properties.load(stream);
    

    路径(示例)/resources/conf.properties 是相对于捆绑文件的 .jar 文件,因此它不依赖于安装文件夹。

    以上示例假设您使用的是属性文件,但这适用于您可以作为流加载的任何资源。

    【讨论】:

    • 但用户有时需要对其进行编辑,因此存储在 jar 中并不是一个解决方案。我让它按原样工作,但仍然想知道我的方法是否错误,或者 Oracle 是否在这里做出了错误的选择。
    • 啊,好吧,如果这些是用户可编辑的,我想你必须处理平台之间的差异。但是,如果您询问文件的初始副本,那么答案是有效的:您应该从 .jar 加载默认文件并将其保存为文件
    • @PaulTaylor 嵌入默认配置(如 Guillaume 所述)然后将其复制到 用户位置(例如用户主页、平台)不是更合适吗? - 特定的应用程序数据位置等)是否需要?将文件复制到安装位置似乎有问题,只是因为您在该位置可能或可能没有写入权限。无论如何,你也许可以在Packaging Tool's User Guide 中找到一些东西。
    • 你可能有一点,但让我进一步解释,。在第一次运行程序时,我确实将配置文件复制到用户位置,但我从安装位置而不是从 jar 复制文件。我的问题是复制到用户位置的代码在进行初始复制时必须考虑位置的差异。如果配置在 jar 文件中,我仍然会遇到位置不同的问题,但我想如果 jar 在类路径上,那么我不必担心它,但只需复制一些文件就更简单了。
    • 重点是,从jar加载文件时,不需要知道jar的位置,也就不需要知道安装位置。
    猜你喜欢
    • 2014-10-24
    • 2012-09-01
    • 2015-12-15
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多