У меня есть простое приложение с весенней загрузкой, которому нужно java .security.krb5.conf значение свойства, установленное в пользовательский файл krb5.conf. Я добавил файл в папку src / main / resources и сделал maven упакованным в банку.
чтобы запустить приложение, я запускаю java -jar -Djava.security.krb5.conf=<localPath>/krb5.conf my-jar.jar
, в настоящее время я должен указать <localPath>
в качестве пути к файлу на моей машине. Есть ли способ обратиться к файлу внутри jar, чтобы я мог работать на любом компьютере, не создавая файл файла сначала на компьютере?
вещи, которые я до сих пор пробовал:
- дай
-Djava.security.krb5.conf=classpath:krb5.conf
(также ./krb5.conf). Не сработало - Я вижу большинство примеров того, как «читать файлы из пути к классам», относится к getClass.getResource (filename). Поэтому я попытался сделать getClass.getResource (filename) .getPath (), чтобы я мог установить его как системное свойство java .security.krb5.conf при запуске приложения в главном классе вместо перехода из командной строки. Но строка, которую показывает getPath, похожа на
/<diskPath>/my-jar.jar!/BOOT-INF/classes!/krb5.conf
, и этот путь не работает, когда я пытаюсь прочитать файл для тестирования. - Создать копию файла на работающем каталоге на лету, в основном методе перед вызовом SprinApplication.run. Это то, что я делаю сейчас.
try(
InputStream in = new ClassPathResource("krb5.conf").getInputStream();
OutputStream out = new FileOutputStream( new File("krb5copy.conf"));) {
IOUtils.copy(in, out);
}
System.setProperty("java.security.krb5.conf","krb5copy.conf");
Если есть решение этого вопроса, я могу видеть другие варианты использования, такие как предоставление файла trustore, включенного в jar, как javax. net .ssl.trustStore et c.