Spring boot не может найти файл ресурсов после упаковки - PullRequest
0 голосов
/ 05 января 2019

Я использую плагин Spring boot maven для упаковки приложения в виде jar-файла.

Он может найти прямой запуск файла ресурсов в Itellij IDE, Но он не может найти файл ресурсов после, он отображает ошибку как:

java.io.FileNotFoundException: ресурс пути к классу [jmxremote.password] не может быть преобразован в абсолютный путь к файлу, поскольку он не находится в файловой системе: jar: file: /home/XXX/target/YYY.jar! / BOOT-INF / классы! /jmxremote.password

Однако файл "jmxremote.password" действительно существует в файле jar.

    private Properties initialJMXServerProperties() throws RuntimeException {
    URL passwordURL = JMXConfig.class.getClassLoader().getResource(passwordFileName);
    URL accessURL   = JMXConfig.class.getClassLoader().getResource(accessFileName);

    String passFile     = Optional.ofNullable(passwordURL).map(URL::getPath).orElseThrow(() -> new RuntimeException("JMX password file not exist"));
    String accessFile   = Optional.ofNullable(accessURL).map(URL::getPath).orElseThrow(() -> new RuntimeException("JMX access file not exist"));

    Properties properties = new Properties();
    properties.setProperty(PASSWORD_FILE_PROP, passFile);
    properties.setProperty(ACCESS_FILE_PROP, accessFile);
    return properties;
}

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Я также сталкивался с подобной проблемой.

class SomeClass{
  @Autowired
  ResourceLoader resourceLoader;

  void someFunction(){
    Resource resource=resourceLoader.getResource("classpath:preferences.json");
    Preferences defaultPreferences = objectMapper.readValue(resource.getInputStream(), Preferences.class);
 }
}

В этом случае я сопоставил данные JSON с классом Preferences. В вашем случае вы можете использовать

resource.getURL()

для дальнейшего использования. Это работает как для среды разработки, так и для развертывания, означает, что оно также работает при сборке и развертывании JAR / WAR в tomcat или при использовании java -jar.

0 голосов
/ 05 января 2019

Вы не можете загрузить файл из JAR как URL. Вы должны загрузить его как InputStream.

В вашем случае:

InputStream passwordInputStream = 
                 JMXConfig.class.getClassLoader().getResourceAsStream(passwordFileName);

Подробнее о здесь: Чтение файла ресурса из jar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...