当前位置: 首页 > 知识库问答 >
问题:

用Jlink打包的应用程序找不到属性文件

白祺然
2023-03-14

我正在将一个应用程序从Oracle Java8迁移到openJDK11+OpenJFX11。在Java8版本中,我使用以下代码加载了一个属性文件(CryoStats是包含代码的类):

try {
    jarLocation = CryoStats.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
    confLocation = jarLocation.substring(0, jarLocation.lastIndexOf("/")) + "/config/";
try (FileInputStream input = new FileInputStream(confLocation + "CryoStats.properties");) {
            properties.load(input);
            HORUS_HOST = properties.getProperty("HORUS_HOST");
            HORUS_USERNAME = properties.getProperty("HORUS_USERNAME");
            HORUS_PASSWORD = properties.getProperty("HORUS_PASSWORD");
            CONNECTION_TIMEOUT = Integer.parseInt(properties.getProperty("CONNECTION_TIMEOUT"));
            SOCKET_TIMEOUT = Integer.parseInt(properties.getProperty("SOCKET_TIMEOUT"));
            System.out.println("CryoStats.properties loaded.");
        } catch (FileNotFoundException ex) {
            System.out.println("Error loading properties file");
            System.out.println(ex.getMessage());
        } catch (IOException ex) {
            System.out.println("Error loading properties file");
            System.out.println(ex.getMessage());
        }
} catch (URISyntaxException ex) {
        System.out.println(ex.getMessage());
    }

在我的Netbeans构建配置中,我有一个任务,将“config”文件夹复制到“dist”文件夹,因此其中包括:我的jar文件、一个“lib”文件夹、一个“config”文件夹。这段代码在Netbeans内部和运行时都可以工作。

我需要给用户编辑属性文件的可能性,所以我需要将它保存在JAR之外。

jarLocation = /cryostats
confLocation = System.getProperty("user.dir") + "/config/";

是否有一种方法可以让用户在jlink生成的运行时映像中访问属性文件,同时让Eclipse访问属性文件?

共有1个答案

莫英卓
2023-03-14

假设类来自。jar文件是平台文件系统中的物理文件,这从来都不是正确的。(另外,getCodeSource()可以返回null)。

Windows、OS X和Linux都有存储用户配置文件的标准位置。请参见查找专用应用程序文件夹的位置。为了使该链接中的信息过于简化:

  • Windows:system.getproperty(“user.home”)+“\\appdata\\roaming\\cryostats”
  • OS X:system.getproperty(“user.home”)+“/library/application support/cryostats”
  • Linux:system.getproperty(“user.home”)+“/.config/cryostats”
 类似资料:
  • 问题内容: 我已经使用Netbeans开发了Java桌面应用程序。在我的应用程序中,我使用了一些属性文件,并将其放置在Project文件夹下,以便可以使用类似的代码来访问它 但是,当我将应用程序部署并打包到.jar文件时,我找不到属性文件在哪里,并且我的应用程序无法从属性文件读取值。 我该如何解决该错误,我应该在哪里放置我的属性文件并将其加载? 问题答案: 将其放在下面,然后按如下所示使用它。 N

  • 我正在尝试将Java应用程序嵌入到本机Mac应用程序中。Java应用程序是用jlink(Java 9)打包的,其中包括一个精简的JRE。 我试图使用Java调用接口创建JVM并启动主类,但程序在调用JNI\U CreateJavaVM时崩溃,因为它找不到libjava。动态库。 在我的Xcode项目中,我有一个“复制文件”阶段,该阶段将整个jlink映像(包含bin、lib等目录的文件夹)复制到应

  • 为缓解 Windows 下路径名过长的 问题, 略微加快一下 require的速度以及隐藏你的源代码,你可以选择把你的应用打包成 asar档案文件,这只需要对你的源代码做一些很小的改动。 大部分用户可以毫不费力地使用这个功能,因为它electron-packager,、electron-forge和electron-builder中都得到了支持,开箱即用。 如果你没有使用这些工具中的任何一个,那么

  • 当我调用服务时,它会给出以下错误:- 我已经基于相同的设计模式构建了REST API,它对我来说工作得很好。我没有得到的东西,为什么它说“没有财产日期找到类型现金流!”?实体中没有日期属性。我尝试删除数据库并重新启动,但没有成功。我错过了什么?

  • 但是当我执行'java--list-modules'时,它列出了所有的模块。 如何从app.main模块运行主类?模块到底复制到哪里了?