Это выглядит для меня как ошибка весны.Из источника :
ProtectionDomain protectionDomain = getClass().getProtectionDomain();
CodeSource codeSource = protectionDomain.getCodeSource();
URI location = (codeSource != null) ? codeSource.getLocation().toURI() : null;
String path = (location != null) ? location.getSchemeSpecificPart() : null;
if (path == null) {
throw new IllegalStateException("Unable to determine code source archive");
}
File root = new File(path);
if (!root.exists()) {
throw new IllegalStateException(
"Unable to determine code source archive from " + root);
}
Проблема заключается в следующей строке:
String path = (location != null) ? location.getSchemeSpecificPart() : null;
Из документации URI :
На самом высоком уровне ссылка на URI (в дальнейшем просто «URI») в строковой форме имеет синтаксис
[ схема :
] специфичная для схемы часть [#
фрагмент ]
Итак, в URI http://localhost/printpoc.jnlp
специфичная для схемы часть - //localhost/printpoc.jnlp
.Затем Spring пытается обработать это как имя файла, которое, конечно, не существует, поэтому вы видите исключение, которое видите.
Код Spring неверен.Это неправильно предполагает, что вы можете сделать имя файла из любого URI.Только file:
URI могут быть безопасно преобразованы в имена файлов, и это правильно сделать с новым файлом (местоположение) или Paths.get (местоположение) .
Я не уверен, что решение.Похоже, что средство запуска Spring Boot предполагает, что .jar всегда является локальным файлом.Я сомневаюсь, что он может работать с файлом .jar, полученным через HTTP.