Почему плагин выпуска maven допускает использование версии SNAPSHOT в управлении зависимостями?

StackOverflow https://stackoverflow.com/questions/2089246

Вопрос

У нас есть 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top