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

时间:2015-07-01 10:53:44

标签: java classloader executable-jar runnable truststore

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

我从项目资源包加载到系统属性两个证书文件,然后将它们连接到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");

1 个答案:

答案 0 :(得分:0)

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

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

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