Каждый раз когда мне надо обновить Spring приложение, мне необходимо закачивать на сервер файл размером 30 мегабайт, 29 из которых занимают библиотеки spring. Можно ли как нибудь установить все библиотеки на сервер, чтобы загружать непосредственно свой код размером 1 мегабайт ?
Есть как минимум два варианта решения этой задачи:
Смысл действий сводится к копированию всех зависимостей в отдельную директорию при сборке. В 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), и приложение будет в дальнейшем использовать их.
Подробно можно почитать тут и тут.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей