1. Предисловие
При нормальных обстоятельствах класс -загрузчик может найти файл *.class только в текущем каталоге или классе файла в JAR. Чтобы загрузить ресурсы в вложенную JAR, файл класса в вложенной JAR и файл класса приложения упакованы в JAR, так что вложенной JAR нет. Однако при этом вы не можете четко знать, откуда зависит приложение, а какие - сами приложение. Кроме того, содержание класса в нескольких банках может быть разным, но имена файлов одинаковы. Spring-Boot-Moder в Springboot родился, чтобы изящно решить эту проблему.
Модуль Spring-Boot-Loader позволяет нам использовать Java -Jar Archive.jar для запуска файлов JAR или войны, содержащих вложенные зависимости. Он предоставляет три типа пусковых установок (Jarlauncher, Warlauncher и PropertiesLauncher). Цель этих классовых запуска состоит в том, чтобы иметь возможность загружать ресурсы, вложенные в JAR (например, файлы класса, файлы конфигурации и т. Д.). [Jar | War] Запускает, уделяется поискам ресурсов в вложенных файлах JAR в каталоге LIB текущей JAR.
2. Структура каталога JAR, предоставленная модулем Spring-Boot-Loader
Формат файла JAR в Springboot зафиксирован следующим образом:
Archive.jar | +-Meta-inf (1) | +-Manifest.mf +-org (2) | +-Springframework | +-boot | +-loader | +-<классы загрузчика Spring Booter> +-com (3) | +-mycompany | + Проект | +-Youclasses.class +-lib (4) +-dependency1.jar +-dependency2.jar
Так как же ресурсы для нагрузки с пружинами в соответствии с этой структурой?
Основной класс: org.springframework.boot.loader.jarlauncher start-class: com.mycompany.project.myapplication
И скопируйте файл класса в пакете Spring-Boot-Loader в структуру (2), скопируйте зависимость приложения, чтобы (4) Скопировать класс приложения (3)
3. Анализ процесса упаковки подключаемой упаковки Spring-Boot-Maven-Plugin
Примечание. Здесь нам нужно подумать о том, почему нам нужно скопировать класс в структуру (2), который должен был быть помещен в Spring-Boot-Loader.jar, который мы должны были поместить в LIB?
4. Анализ процесса выполнения Jarlauncher
Прочитав этот процесс, мы проанализируем проблемы, оставленные в третьем разделе. Например, FluteChard сначала использует Appclassloader для загрузки класса Jarlauncher и создания класса LaunchedUrlClassloader. Запуск eduRlclassloader принадлежит пакету Spring-boot-loader.jar, а AppClassLoader-обычный загрузчик, который не может загрузить файлы в вложенную JAR. Следовательно, если Spring-Boot-Loader.jar помещается в каталог LIB, AppClassLoader не найдет загрузку запуска. Так что при упаковке
Скопируйте класс в структуру (2), который должен был быть помещен в Spring-Boot-Loader.jar в Lib.
5. Резюме
Модуль пружинного нагрузки элегантно реализует загрузку вложенных ресурсов JAR через индивидуальную структуру пакета JAR. Сбросив класс стартапов и структуру банки организации во время упаковки и установив пользовательский погрузчик во время выполнения для достижения вложенных ресурсов JAR.