【问题标题】:Executable jar - loading truststore from projects resources可执行 jar - 从项目资源加载信任库
【发布时间】:2015-09-18 11:44:40
【问题描述】:

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

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

【问题讨论】:

    标签: java classloader executable-jar runnable truststore


    【解决方案1】:

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

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

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

    【讨论】:

    • 不幸的是它也会导致空指针异常;/我想知道这个 JMS 证书是否有问题,它们不能作为流加载?但是像 C:/temp/etc... 这样的文件的绝对路径可以正常工作(但这是一个糟糕的解决方案....)
    • 你应该做的是在调试模式下尝试不同的资源路径(在检查模式下)——这将使你更快地找到如何获得所需的资源。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多