Управление Версиями Зависимостей В Проекте Maven

Одним из преимуществ организации Java-проекта с помощью Maven является удобное описание всех необходимых для него библиотек и их версий.

В дальнейшем по мере развития проекта мы возможно захотим иметь возможность обновлять версии этих библиотек.

Эту функциональность обеспечивает расширение Версии .

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

  1. версия родительского проекта (при наличии);
  2. версия зависимости;
  3. используемая версия расширений Maven.
Самая простая задача — обновить версию родительского проекта.

Достаточно запустить в корне вашего проекта команда :

  
  
  
  
  
  
  
   

mvn versions:update-parent

Чтобы иметь возможность обновлять версии остальных зависимостей, их версии должны быть явно описаны как переменные в разделе характеристики Проект Мавен.

Зависимости, версии которых описаны без ссылки на переменную, не могут быть обновлены таким способом.

То же самое относится и к версиям всех используемых вами расширений.

Таким образом, вам необходимо явно прописать в проекте все используемые расширения, поместив их версии в переменные, после чего их версии также начнут обновляться.

В результате все наши зависимости и расширения будут выглядеть так:

<Эxml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " xmlns=" http://maven.apache.org/POM/4.0.0 " xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> <properties> <spring.version>4.2.0.RELEASE</spring.version> <maven-clean.version>2.6.1</maven-clean.version> </properties> <dependencies> <!-- Spring Framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <executions> <execution> <id>auto-clean</id> <phase>initialize</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>${maven-clean.version}</version> </plugin> </plugins> </pluginManagement> </build> </project>

Чтобы выяснить, какие еще расширения мы не указали явно, нам нужно использовать команда :

mvn versions:display-plugin-updates

по результатам его работы вы сможете узнать, какие еще расширения не зарегистрированы в вашем проекте и версиями которых вы не управляете.

Там же будет указано, какую минимальную версию Maven вам нужно указать в своем проекте, чтобы все расширения работали корректно.

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

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

mvn versions:update-properties

Далее вы можете просмотреть список изменений, внесенных расширением в проект Maven, и принять решение об их целесообразности.

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

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

Давайте создадим файл maven-версия-rules.xml в корне проекта со следующим содержимым:

<Эxml version="1.0" encoding="UTF-8"?> <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance " comparisonMethod="maven" xmlns=" http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 " xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 http://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd "> <rules> <rule groupId="org.hibernate"> <ignoreVersions> <ignoreVersion type="regex">.

*Alpha.*</ignoreVersion> <ignoreVersion type="regex">.

*Beta.*</ignoreVersion> <ignoreVersion type="regex">.

*[.

]CR.*</ignoreVersion> </ignoreVersions> </rule> </rules> </ruleset>

И давайте подключим его:

<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <configuration> <generateBackupPoms>false</generateBackupPoms> <rulesUri> file://${project.basedir}/maven-version-rules.xml </rulesUri> </configuration> </plugin>

В результате вы можете захотеть создать такой файл update.bat (В качестве опции, update.sh ) для обновления версий в будущем:

call mvn versions:update-parent versions:update-properties

или просто:

call mvn versions:update-properties

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

Все источники доступны по адресу GitHub .

Теги: #java #maven #spring framework #spring bootugin #разработка веб-сайтов #java

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.