Установка библиотек Spring на сервер

106
21 марта 2022, 08:50

Каждый раз когда мне надо обновить Spring приложение, мне необходимо закачивать на сервер файл размером 30 мегабайт, 29 из которых занимают библиотеки spring. Можно ли как нибудь установить все библиотеки на сервер, чтобы загружать непосредственно свой код размером 1 мегабайт ?

Answer 1

Есть как минимум два варианта решения этой задачи:

Настройка Maven Dependency Plugin

Смысл действий сводится к копированию всех зависимостей в отдельную директорию при сборке. В pom.xml для этого потребуется примерно такая конфигурация:

<project>
    <!-- прочие настройки проекта -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/libs
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Для уточнения списка копируемых зависимостей можно использовать свойства, начинающиеся на include и exclude в блоке configuration.

После сборки проекта в директории target появится директория libs, в которой будут все зависимости проекта. Но в этом случае в одной директории с JAR проекта должна находиться директория libs с зависимостями (подробности в META-INF/MANIFEST.MF` собранного JAR). JAR проекта и зависимости можно будет обновлять отдельно от друг от друга.

Обращаю внимание на то, что spring-boot-maven-plugin не должен быть настроен на сборку толстого JAR.

Использование spring-boot-thin-layout

Второй вариант - использование spring-boot-thin-layout в качестве зависимости для spring-boot-maven-plugin.

В этом случае pom.xml будет иметь такую конфигурацию:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot.experimental</groupId>
            <artifactId>spring-boot-thin-layout</artifactId>
            <version>1.0.23.RELEASE</version>
        </dependency>
    </dependencies>
</plugin>

При запуске проекта, собранного с такой конфигурацией, зависимости будут подтянуты автоматически в стандартную директорию для репозитория Maven (~/.m2/repository), и приложение будет в дальнейшем использовать их.

Подробно можно почитать тут и тут.

READ ALSO
MyFrame is not abstract and does not override abstract method actionPerfomed (ActionEvent) Action Listener, new level

MyFrame is not abstract and does not override abstract method actionPerfomed (ActionEvent) Action Listener, new level

Самостоятельно изучаю java с помощью книжкиТакая проблема и до этого выскакивала, я просто сменил версию, не помогло

201
Доступ к методу абстрактного класса общего для нескольких классов

Доступ к методу абстрактного класса общего для нескольких классов

У меня есть три класса, являющиеся компонентами

158
Уведомление в приложение при изменение данных

Уведомление в приложение при изменение данных

Приложение список: значение - количество Как сделать проверку раз в 15 секунд обновились ли эти количества и если да то вывести уведомления...

132
что делать, если задано неверное значение и переменная должна остаться без изменений java

что делать, если задано неверное значение и переменная должна остаться без изменений java

переменная должна остаться без изменений, если задано неверное значение

67