在linux中访问Spring启动应用程序资源文件的问题

时间:2016-10-10 06:57:39

标签: java file resources classpath keystore

概述:

我使用以下代码从证书文件创建密钥库,该文件位于resources / certificates / crt.p12中:

public static KeyStore getKeyStoreFromFile(String certificateFilePath,
        String certificatePassword) throws KeyStoreException {
        File p12File = new File(
            KeyStoreUtil.class.getClassLoader().getResource(certificateFilePath).getFile());
        KeyStore.Builder builder = KeyStore.Builder.newInstance("PKCS12", null, p12File,
            new KeyStore.PasswordProtection(certificatePassword.toCharArray()));
        return builder.getKeyStore();
    }

它适用于Windows平台。

问题:

但是,当我在Linux平台上运行时,系统无法找到该文件并引发以下异常:

java.lang.IllegalArgumentException: File does not exist or it does not refer to a normal file: file:/executable/billpay-billinfo-services.jar!/certificates/crt.p12

我认为这是不同的平台问题,如果有人能帮我找到解决这个问题的解决方案,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

  

喜欢这个   Classpath resource not found when running as jar   但不是重复,不是同一个问题

resource.getFile()期望资源本身在文件系统上可用,即它不能嵌套在jar文件中。使用resource.getInputStream()。

资料来源:Classpath resource not found when running as jar

答案 1 :(得分:0)

首先,我明白将证书文件放在类路径中是一种不好的做法,因为将来可能需要更改它。所以我将它从类路径中排除并将其放在我的jar文件旁边。这次我运行测试时可以访问证书文件。