【问题标题】:Load a resource in executable jar在可执行 jar 中加载资源
【发布时间】:2012-12-05 23:43:43
【问题描述】:

我遇到了一个带有可执行 jar 的文件夹问题。

其实我是想打电话的

    URL keystoreURL = ServerGUI.class.getResource("/resources/keystore");
    String keystorePath = keystoreURL.getPath();
    System.setProperty("javax.net.ssl.keyStore",keystorePath);

加载密钥库。 因为 setProperty 想要一个字符串来访问文件。

我的资源文件夹位于 Eclipse 的 /src 文件夹中。 在 Eclipse 中工作时一切正常,但如果我想创建一个可执行的 jar 文件,即使资源文件夹也存在,路径也不正确。

edit:打印路径时的另一件有趣的事情: 在 Eclipse 中:file:/C:/Users/Xenom/workspace/eBankingRMI/bin/resources/truststore

在 jar 中:jar:file:/C:/Users/Xenom/Desktop/ClientBanking.jar!/resources/truststore

那么显然 setProperty 无法读取第二个...

【问题讨论】:

  • 怀疑 API 正在寻找 File 而不是 URL 参考
  • 事实上最好的方法是提供一个像 /resources/keystore 这样的相对路径,但是如果我直接在 setProperty 中写这个,我会得到一个 java.io.FileNotFoundException: \resources\keystore (系统找不到指定的路径)..
  • 解压创建的jar,查看内部文件夹结构
  • 结构没问题,只是字符串路径不正确,你可以在我的编辑中看到。
  • 怀疑尝试加载密钥库的 API 正在尝试通过 File 引用来执行此操作,而 new File("jar:file:/C:/Users/Xenom/Desktop/ClientBanking.jar!/resources/truststore") 不是有效文件。另外,您的原始帖子说/resources/keystore,但您的更新说/resources/truststore

标签: java eclipse jar


【解决方案1】:

无法保证资源 URL 与实际文件系统文件匹配。在大多数情况下,罐子或战争中不会出现这种情况。

如果您的 API 绝对需要文件(AFAIK 密钥库也需要),您需要获取该 URL 并将其流式传输到实际的文件系统文件,然后使用它来设置属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    相关资源
    最近更新 更多