可执行 jar - 从项目资源加载信任库

Executable jar - loading truststore from projects resources

我知道有很多类似的问题,我想我已经阅读并检查了所有可能性,但不知道我做错了什么...

我正在将项目资源包中的两个证书文件加载到系统属性,然后将它们连接到 JMS 服务器。 运行 应用程序在 Eclipse 模式下一切正常,尝试从可运行的 JAR 文件读取资源时出现问题,导致错误:

FileNotFoundException: file:\path_to_my_jar!\resources\serverids.jks

文件位于 jar 中(在主文件夹中)。此文件夹位于 src/resources,但我已尝试在 src 外部创建资源文件夹并将其链接到具有相同结果的构建路径。

这就是我读取文件和设置 connectionManager 属性的方式:

    ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
    String keyStore =  currentClassLoader.getResource("resources/serverids.jks").getPath();
    String trustStore =  currentClassLoader.getResource("resources/server.truststore").getPath();

    System.setProperty("javax.net.ssl.keyStore", keyStore);
    System.setProperty("javax.net.ssl.keyStorePassword", "pass");
    System.setProperty("javax.net.ssl.trustStore", trustStore);
    System.setProperty("javax.net.ssl.trustStorePassword", "pass");

将此资源作为 InputStream 获取,然后将其读取到 String 到您要设置的 属性 值。此外,在您的情况下,您应该以这种方式提取资源:

CurrentClass.class.getResourceAsStream("blah.jks")

请不要忘记在处理后关闭流。