Как я могу настроить Maven для фиксации в хранилище Mercurial при установке: установить - PullRequest
3 голосов
/ 18 декабря 2009

Maven 's SCM плагин, по-видимому, не обеспечивает цель "фиксации". scm:checkin выполняет фиксацию и толчок. Мне нужно избегать толчка.

Мне просто интересно сделать hg commit во время install:install. Я не использую плагин release и пока не нужен. Я просто работаю локально в многомодульной среде и хочу убедиться, что мой исходный репозиторий соответствует моим локально установленным снимкам Maven для каждого модуля. Другими словами, каждый раз, когда я устанавливаю новый снимок модуля, я хочу, чтобы связанный код, зафиксированный в hg, делал так, чтобы каждый снимок напрямую соотносился с ревизией hg (или диапазоном ревизий, когда между моментальными снимками происходит несколько фиксаций).

Ответы [ 3 ]

2 голосов
/ 23 декабря 2009

Следующее будет связывать scm:checkin с фазой install. Пока хранилище представляет собой схему file:// (по крайней мере для Mercurial, согласно код ), push не выполняется в течение scm:checkin.

  1. Определите свойства, используемые в следующих шагах:

    <properties>
      <message>maven install:install auto-checkin.</message>
      <repository.local>file:///path/to/local/repository</repository.local>
      <repository.type>hg</repository.type>
    </properties>
    

    <message> может быть любым, что вы выберете. Это не идеально, чтобы быть полностью исправленным, поскольку коммиты должны включать осмысленные сообщения о том, какие изменения были сделаны. Но я верю, что в автокоммиты должно быть включено стандартное сообщение, чтобы идентифицировать его как таковое. Просто изменяйте свойство <message> из шага 1. перед каждой установкой.

  2. Это просто стандартный узел scm для проекта на основе Maven. Поскольку это касается только локального хранилища, URL-адреса все одинаковые.

    <scm>
      <connection>scm:${repository.type}:${repository.local}</connection>
      <developerConnection>scm:${repository.type}:${repository.local}</developerConnection>
      <url>scm:${repository.type}:${repository.local}</url>
    </scm>
    
  3. Это плагин, который запускается во время фазы install, которая выполняет фиксацию. Он просто выполнит правильную проверку scm на основе определения в шаге 2.

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-plugin</artifactId>
          <version>1.2</version>
          <executions>
            <execution>
              <phase>install</phase>
              <goals>
                <goal>checkin</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    

Одна проблема в том, что я получаю следующее.

УСТАРЕЛО: связующий агрегат мохос к этапам жизненного цикла в POM считается опасным. Эта функция имеет осуждается. Пожалуйста, настройте ваш POM файлы соответственно.

Я смотрю, как решить эту проблему, но пока это работает, и я собираюсь с этим.

0 голосов
/ 18 декабря 2009

Плагин Maven для scm, по-видимому, не обеспечивает цель "commit". scm:checkin выполняет фиксацию и толчок. Мне нужно избегать толчка.

Тогда плагин scm, возможно, не то, что вы ищете :)

Я просто заинтересован в выполнении hg commit во время install:install. Я не использую плагин release и пока не нужен.

Если честно, это довольно странное использование. Хотя я понимаю, что вы описали, для меня не имеет смысла «синхронизировать» SNAPSHOT с номером ревизии. Даже если вы не фиксируете код между двумя сборками SNAPSHOT, я не понимаю, как это может быть проблемой. Другими словами, я не вижу, какова дополнительная ценность форсирования коммита. И использование плагина релиза, по моему мнению, ничего не решит.

Подводя итог, я не думаю, что плагин scm позволит вам достичь своей цели (по крайней мере, не без взлома). Я не знаю, есть ли в Ant поддержка Mercurial, но, если таковая имеется, возможно, вам стоит взглянуть в этом направлении (и использовать плагин antrun).

0 голосов
/ 18 декабря 2009

Как насчет установки connectionUrl на checkin в одноразовый репозиторий на локальном компьютере? Таким образом, ваша проверка будет происходить из «центрального» репозитория, но ваша «регистрация» будет идти только в рабочий репозиторий (фиксация, которую вы хотите), и (очевидно) неизбежное нажатие будет идти в файл: /// tmp / whocares.

С другой стороны, возможно, в плагине scm есть одна строка кода, которую можно комментировать, чтобы избежать этого толчка.

...