2015-01-21 2 views
2

У меня есть приложение для загрузки весны, и я начинаю его с -Dloader.path =. Одним из файлов jar является hive-exec.jar. У этого есть файл jar в комплекте, названный minlog-1.2.jar. Если я указываю этот файл в -Dloader.path, я получаю сообщение об ошибке,Spring boot createJarFileFromFileEntry

java.lang.IllegalStateException: Не удается открыть вложенную запись 'minlog-1.2.jar. Он был сжат, и вложенные файлы jar должны храниться без сжатия. Пожалуйста, проверьте механизм, используемый для создания исполняемого файла jar на org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry (JarFile.java:378) на org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry (JarFile .java: 355) на org.springframework.boot.loader.jar.JarFile.getNestedJarFile (JarFile.java:341) на org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive (JarFileArchive.java:108) на org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives (JarFileArchive.java:92) на org.springframework.boot.loader.PropertiesLauncher.getClassPathArchives (СвойстваLauncher.java:445) на org.springframework.boot.loader .Launcher.launch (Launcher.java:60) at org.springframework.boot.loader .PropertiesLauncher.main (PropertiesLauncher.java:564)

Однако, если скопировать этот файл в папку и добавить эту папку в -Dloader.path, я не получаю сообщение об ошибке.

Что мне не хватает?

Спасибо,

ответ

0

Я пытаюсь управлять драйвером базы данных в качестве внешней баночки вместо зависимости Maven проекта, в по. Приложение использует структуру JPA, и мы хотели иметь возможность переключаться с одной реализации SQL-базы данных из одной среды в другую (например, H2 в DEV, Oracle на производстве). Мне пришлось управлять банком h2-database-driver как внешней зависимостью. Загружая его с помощью командной строки «-Dloader.path», я столкнулся с той же проблемой, что и вы описали.

Просмотр исходного кода org.springframework.boot.loader.jar.JarFile, класс управляет записью папки и jar-entry по-разному. Метод getNestedArchives, похоже, вызывает метод createJarFileFromFileEntry, который генерирует это исключение. Должна быть веская причина, если кто-то знает об этом, любые комментарии приветствуются!

При загрузке зависимостей фляги из каталога, конструктор java.util.jar.JarFile используется вместо и, кажется, не бросать никаких исключений ...

В методе createJarFileFromFileEntry, вместо внесения бросать исключение, не было бы возможно иметь только log.warn и не исключать исключение?

+0

Насколько я знаю, для использования loader.path нужно использовать «org.springframework.boot.loader.PropertiesLauncher» вместо jar launcher. Я использую его, но он все равно терпит неудачу с тем же исключением. Я предполагаю, что он использует Jar launcher. как насчет открытия ошибки для этого? – nir

+0

Я также использую 'org.springframework.boot.loader.PropertiesLauncher'. Для меня просто немного странно, что мы имеем разные способы поведения, импортируя банку, предоставляя каталог, содержащий его, и предоставляем банку. Я последую за вашей рекогносцировкой и открою следующую проблему: https://github.com/spring-projects/spring-boot/issues/3701 –