Подтвердить что ты не робот

Освобождение многомодульного проекта maven с помощью Git

Я пытаюсь выпустить многомодульный проект maven, который использует git как SCM, и среди первых проблем, с которыми я столкнулся, является способ, которым плагин релиза maven создает release.properties scm.url, Мой родительский POM выглядит примерно так:

<packaging>pom</packaging>
<groupId>org.project</groupId>
<artifactId>project-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>

<scm>
    <connection>scm:git:git://github.com/username/project.git</connection>
    <developerConnection>scm:git:[email protected]:username/project.git</developerConnection>
    <url>http://github.com/username/project</url>
</scm>

<modules>
    <module>api</module>
    <module>spi</module>
</modules>

И модульные POM просто:

<parent>
    <groupId>org.project</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>api</artifactId>
<version>0.2.2</version>

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

Когда я перехожу в каталог api и выполняю mvn release:clean release:prepare, я получаю следующий вывод:

[INFO] Executing: cmd.exe /X /C "git push [email protected]:username/project.git/api master:master"
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to commit files
Provider message:
The git-push command failed.
Command output:
ERROR: Repository not found.

Похоже, что плагин релиза maven создает scm.url, добавляя имя модуля к developerConnection, который в конечном итоге не является допустимым репозиторием в github. Я не уверен, как правильно это установить. Может быть, Maven + git + освобождение отдельного дочернего модуля просто не сработает? Любой вход оценивается.

4b9b3361

Ответ 1

Чтобы посмотреть, как это сделать, посмотрите на рабочий пример, например:

https://github.com/sonatype/sonatype-aether

Однако это не поможет, если вы хотите выпустить отдельные части. В этом случае вам нужно просто скопировать файл <scm> элементов во всех позах.

Это активная тема обсуждения в списке maven dev, но не задерживайте дыхание от решения; это большое дело.

Ответ 2

Я нашел этот вопрос при поиске в "git -push command failed". У меня есть аналогичная конфигурация, где у меня есть master-pom, а затем подмодули, которые я выпускаю как свои собственные пакеты maven.

Чтобы заставить его работать, мне пришлось настроить scm раздел pom.xml на следующее. Соединения специально должны были быть настроены на работу. Ни один из github не работал вообще.

<scm>
    <url>https://github.com/XXX/YYY</url>
    <connection>scm:git:ssh://[email protected]/XXX/YYY.git</connection>
    <developerConnection>scm:git:ssh://[email protected]/XXX/YYY.git</developerConnection>
</scm>

В приведенном выше примере XXX указано ваше имя пользователя github. Вы не можете использовать формат :XXX ([email protected]:XXX/...), потому что значение, прошедшее после :, интерпретируется как номер порта. YYY - это, очевидно, ваше имя репозитория в учетной записи XXX.

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

Ответ 3

Для тех, кто приходит к этому вопросу в поисках хорошего решения, как и я, то, что я нашел, что работает для меня, является следующим:

http://blog.avisi.nl/2012/02/15/maven-release-plugin-setup-guide-for-git/

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

Ответ 4

Я пытался сделать подобную вещь в течение долгого времени и никогда не нашел хорошего решения, поэтому написал свой собственный плагин выпуска для git. Он только выпускает измененные модули, вам не нужна никакая конфигурация scm, теги, основанные на именах модулей, и межкомпонентные зависимости работают.

Документация: http://danielflower.github.io/multi-module-maven-release-plugin/index.html

Введение в блог: http://danielflower.github.io/2015/03/08/The-Multi-Module-Maven-Release-Plugin-for-Git.html

Ответ 5

Простым способом, что сработало для меня, является использование родительских свойств в модулях pom.xml, как показано в теге scm, например:

<!--module pom.xml-->
<scm>
    <connection>${project.parent.scm.connection}</connection>
    <developerConnection>${project.parent.scm.developerConnection}</developerConnection>
</scm>