Почему плагин выпуска maven допускает использование версии SNAPSHOT в управлении зависимостями?
-
21-09-2019 - |
Вопрос
У нас есть 1 родительская компания.При этом используется dependencyManagement для управления версиями всех зависимостей всех используемых артефактов.
Что настораживает, так это то, что версии SNAPSHOT могут быть определены в dependencyManagement.Хотя при выполнении выпуска maven разрешен выпуск pom с версией SNAPSHOT в dependencyManagement.Почему?
Если я укажу дочернему проекту выпущенную версию родительского pom компании, и этот дочерний проект использует зависимость, определенную в dependencyManagement, хотя это версия SNAPSHOT, я не смогу выпустить дочерний проект.
Почему Maven разрешает выпуск версии SNAPSHOT для артефакта, определенного в dependencyManagement?И как я могу настроить плагин выпуска maven на сбой, если определена версия SNAPSHOT?
Решение
Что настораживает, так это то, что версии SNAPSHOT могут быть определены в dependencyManagement.Хотя при выполнении выпуска maven разрешен выпуск pom с версией SNAPSHOT в dependencyManagement.Почему?
Я бы ожидал, что maven-релиз-плагин для обновления версий SNAPSHOT в dependencyManagement
после выпуска.Вообще-то есть какие-то Jira по этому поводу, например МРРЕЛИЗ-91 и МРРЕЛИЗ-202 это может повлиять на вас.
Итак, вопрос:какую версию плагина вы используете?
Но если честно, не очень понятно, на какие версии влияют МРРЕЛИЗ-202, комментарии сбивают с толку (поэтому интересно, решена проблема или нет).В любом случае, если это касается используемой вами версии, обновите ее до более последней версии.И если ошибка/регресс (я думаю, что это ошибка) все еще существует, поднимите новую проблему.
Другие советы
I do not have the answer as to 'why' (personally I think it's a bug), but I have a way to prevent this happening: use the Maven Enforcer plugin.
A company called smartics (lowercase s) have created a rule (NoSnapshotDependenciesInDependencyManagementRule) to prevent this exact problem.
You basically need to add the following to your parent POM:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce-project-rules</id>
<phase>test</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<NoSnapshotDependenciesInDependencyManagementRule
implementation="de.smartics.maven.enforcer.rule.NoSnapshotsInDependencyManagementRule">
<onlyWhenRelease>true</onlyWhenRelease>
<checkOnlyResolvedDependencies>false</checkOnlyResolvedDependencies>
</NoSnapshotDependenciesInDependencyManagementRule>
</rules>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>de.smartics.rules</groupId>
<artifactId>smartics-enforcer-rules</artifactId>
<version>1.0.2</version>
</dependency>
</dependencies>
</plugin>