Почему плагин Maven Release позволяет использовать версию SNAPSHOT в управлении зависимостями? - PullRequest
5 голосов
/ 19 января 2010

У нас есть 1 компания-родитель пом.Для управления версиями для всех зависимостей всех используемых артефактов используется dependencyManagement.

Что вызывает тревогу, так это то, что версии SNAPSHOT могут быть определены в dependencyManagement.Хотя, когда выполняется релиз maven, pom разрешается выпускать с версией SNAPSHOT в dependencyManagement.Зачем?

Если я указываю дочерний проект на выпущенную версию родительского pom компании, и этот дочерний проект использует зависимость, определенную в dependencyManagement, хотя это версия SNAPSHOT, я не могу выпустить дочерний проект.*

Почему Maven разрешает выпуск версии SNAPSHOT для артефакта, определенного в dependencyManagement?И как я могу настроить плагин релиза maven на сбой, если определена версия SNAPSHOT?

Ответы [ 2 ]

3 голосов
/ 19 января 2010

Что вызывает тревогу, так это то, что версии SNAPSHOT могут быть определены в dependencyManagement. Хотя, когда выполняется релиз maven, pom разрешается выпускать с версией SNAPSHOT в dependencyManagement. Почему?

Я ожидаю, что maven-release-plugin обновит версии SNAPSHOT в dependencyManagement после выпуска. На самом деле, есть некоторые Jira по этому поводу, например MRELEASE-91 и MRELEASE-202 , которые могут повлиять на вас.

Итак, вопрос в том, какую версию плагина вы используете?

Но, честно говоря, не совсем понятно, на какие версии влияет MRELEASE-202 , комментарии сбивают с толку (поэтому мне интересно, исправлена ​​ли проблема или нет). В любом случае, если на используемую вами версию влияет, обновите ее до более новой. И если ошибка / регрессия (я думаю, что это ошибка) все еще существует, тогда поднимите новую проблему.

0 голосов
/ 21 июня 2016

У меня нет ответа на вопрос «почему» (лично я считаю, что это ошибка), но у меня есть способ предотвратить это: используйте плагин Maven Enforcer.

Компания под названием smartics (строчные буквы s) создали правило ( NoSnapshotDependenciesInDependencyManagementRule ), чтобы предотвратить эту проблему.

В основном вам необходимо добавить следующее в родительский 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>
...