【问题标题】:where does exeutable app made by JPackage save its local resourcesJPackage制作的可执行应用程序在哪里保存其本地资源
【发布时间】:2021-11-23 03:35:20
【问题描述】:

我选择将我的 SQLite 数据库文件放在本地资源中,并使用 JPackage 打包我的应用程序。

问题是每当我从桌面删除应用程序并重新安装它时,数据库数据不会被删除(删除应用程序),所以我假设本地资源被保存在桌面上的其他地方(安装应用后)除了应用目录之外,如何找到它们的保存位置?

我正在使用 JLink-badass 插件来打包它,这里是它的参数:

jlink {
jpackage {
    installerName = 'demo'
    installerType = 'msi'
    installerOptions = [
            '--description', 'demo',
            '--copyright', 'Copyrigth 2021-2021 demo'
    ]
    installerOptions += ['--win-menu', '--win-shortcut']
 
}

launcher {
    name = 'demo'

【问题讨论】:

  • 但是你只能将它用作只读数据库,我什至不知道你是否可以将数据库作为资源连接。我更喜欢在首次启动时将此类资源复制到外部文件夹中。
  • @mipa 您可以连接到数据库作为资源。我在将资源复制到外部文件夹时遇到的问题(以 /src/main 目录为例)是在将我的应用程序打包后,我的数据库的目录发生了变化,因此应用程序不再连接到它
  • 你误解了我的评论。我的意思是向您的应用程序添加一些代码,当您的用户首次在他们的系统上启动它时,将打包的数据库提取到某个外部文件夹(如 /.myapp/)。这是应用程序将数据存储在某个应用程序特定文件夹中的典型行为。
  • @slaw 我最终在 \AppData\Local\Temp 目录中找到了资源文件(只是数据库文件),这解释了为什么删除应用程序后数据库数据没有被删除,仍然不知道为什么他们被保存在那里,我怎样才能让他们被保存在应用程序目录中。
  • 假设您使用的是“xerial”驱动程序,看起来它会将资源提取到一个临时文件中。您可以在the source code 中看到这一点。尽管如果资源的最后修改时间更近,它看起来也会删除任何现有的临时数据库文件。无论如何,也许 SQLite 库无法处理对 JAR 文件中嵌入的数据库文件的操作,因此驱动程序别无选择,只能将其提取到真实文件中。

标签: javafx windows-installer java-11 jlink jpackage


【解决方案1】:

只需将 app-image 或包中的文件视为不可变的。 但是,您仍然可以将数据存储在例如用户的主目录。这样做的好处是您可以卸载应用程序或将应用程序升级到另一个版本,并且仍然可以访问存储数据的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-09
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多