1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/core-lib-slot-maven-plugin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Слот — Spring Boot 可插件化拓展改造器, позволяющий Spring-Boot приложениям поддерживать загрузку внешних jar-пакетов и осуществлять плагинное расширение. GitHub: https://github.com/core-lib/slot-maven-plugin

Слот: в компьютерной индустрии это означает периферийные элементы расширения слота.

Проблема

Spring-Boot проект после упаковки представляет собой FatJar, который включает в себя все зависимые сторонние jar-файлы. Во время выполнения classpath включает в себя BOOT-INF/classes каталог и все jar-файлы в BOOT-INF/lib.

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

Слот — это Maven плагин, который позволяет преобразовать Spring-Boot проекты в поддерживающие загрузку внешних jar.

Принцип работы

Процесс запуска Spring-Boot JAR можно разделить на несколько этапов:

  1. Запуск с помощью команды java -jar spring-boot-app.jar args...
  2. JVM считывает значение Main-Class из файла META-INF/MANIFEST.MF в Spring-Boot JAR, обычно это org.springframework.boot.loader.JarLauncher.
  3. JVM вызывает метод main класса JarLauncher, передавая ему параметры из командной строки.
  4. JarLauncher создаёт ClassLoader и рефлексивно вызывает метод main Start-Class, обычно это класс Application в проекте.
  5. Метод main класса Application вызывает SpringApplication.run(Application.class, args); для запуска приложения.

Основной принцип работы Слот:

  1. Расширение org.springframework.boot.loader.JarLauncher для чтения внешних jar-пакетов на основе параметров запуска и добавления их в classpath.
  2. Изменение значения Main-Class в файле META-INF/MANIFEST.MF на расширенный JarLauncher.

Зависимости среды

  1. JDK 1.7+
  2. Spring-Boot

Использование

<project>
    <!-- Настройка jitpack.io плагина репозитория -->
    <pluginRepositories>
        <pluginRepository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </pluginRepository>
    </pluginRepositories>
    <!-- Добавление Slot Maven плагина -->
    <build>
        <plugins>
            <plugin>
                <groupId>com.github.core-lib</groupId>
                <artifactId>slot-maven-plugin</artifactId>
                <version>1.0.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>transform</goal>
                        </goals>
                        <phase>package</phase>
                                <configuration>
                            <!-- optional
                            <sourceDir/>
                            <sourceJar/>
                            <targetDir/>
                            <targetJar/>
                            -->
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Параметры

Параметр Имя параметра командной строки Описание Тип Значение по умолчанию Пример значения
sourceDir -Dslot.sourceDir Каталог исходного jar File ${project.build.directory} Каталог файлов
sourceJar -Dslot.sourceJar Имя исходного jar String ${project.build.finalName}.jar Имя файла
targetDir -Dslot.targetDir Каталог целевого jar File ${project.build.directory} Каталог файлов
targetJar -Dslot.targetJar Имя целевого jar String ${project.build.finalName}-slot.jar Имя файла

По умолчанию плагин выполняется на этапе package, но также может быть выполнен отдельно с использованием команды mvn slot:transform.

Значение по умолчанию для имени jar после обновления с помощью slot — ${project.build.finalName}-slot.jar, которое можно изменить с помощью конфигурации плагина или параметров команды.

Замечания

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <!-- Необходимо удалить параметры executable и embeddedLaunchScript, в настоящее время не поддерживается обновление для этого режима Jar!
    <configuration>
        <executable>true</executable>
        <embeddedLaunchScript>...</embeddedLaunchScript>
    </configuration>
    -->
</plugin>

Запуск приложения

Slot поддерживает два параметра для указания загружаемых внешних jar:

  1. --slot.root — корневой путь внешних jar, по умолчанию равен каталогу Spring-Boot jar.
  2. --slot.path — путь к внешним jar, поддерживает несколько путей и ANT-выражения.
java -jar spring-boot-app-slot.jar --slot.root=/absolute/root/ --slot.path=foo.jar  --slot.path=bar.jar

java -jar spring-boot-app-slot.jar --slot.path=/relative/path/to/plugin.jar

java -jar spring-boot-app-slot.jar --slot.path=/relative/path/to/**.jar

ANT-выражение для подстановки:

Подстановочный знак Значение Пример
** Любой символ и каталог /plugins/**.jar — все файлы .jar в каталоге /plugins и его подкаталогах
* Любой символ /plugins/*.jar — все файлы .jar в каталоге /plugins
? Один символ ???.jar — файлы с именами из трёх произвольных символов и расширением .jar в текущем каталоге

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Плагин-модификатор для Spring Boot с возможностью расширения, который позволяет Spring-Boot приложениям загружать внешние JAR-пакеты и осуществлять расширение через плагины. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/core-lib-slot-maven-plugin.git
git@api.gitlife.ru:oschina-mirror/core-lib-slot-maven-plugin.git
oschina-mirror
core-lib-slot-maven-plugin
core-lib-slot-maven-plugin
master