Выпуск мультимодульного проекта Maven с Git - PullRequest
29 голосов
/ 18 июля 2011

Я пытаюсь выпустить многомодульный проект 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:git@github.com: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 git@github.com: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 +, выпустив отдельный дочерний модуль, просто не будет работать?Любой вклад приветствуется.

Ответы [ 7 ]

14 голосов
/ 18 июля 2011

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

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

Однако, это не поможет, если вы хотите выпустить отдельные части. В этом случае вам нужно просто скопировать элементы во все poms.

Это активная тема для обсуждения в списке разработчиков Maven, но не ждите решения оттуда; это большое дело.

12 голосов
/ 13 марта 2013

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

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

<scm>
    <url>https://github.com/XXX/YYY</url>
    <connection>scm:git:ssh://git@github.com/XXX/YYY.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/XXX/YYY.git</developerConnection>
</scm>

XXX в приведенном выше примере - это ваше имя пользователя на github.Вы не можете использовать формат :XXX (git@github.com:XXX/...), поскольку значение после : вместо этого интерпретируется как номер порта.YYY, очевидно, является именем вашего хранилища под учетной записью * 1013. *

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

1 голос
/ 20 сентября 2016

Я долго пытался сделать подобное, но так и не нашел хорошего решения, поэтому написал свой собственный плагин релиза для 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

1 голос
/ 21 июня 2013

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

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

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

0 голосов
/ 14 марта 2019

Я ответил на связанный вопрос здесь (мультимодуль с несколькими репозиториями) . в основном, вы можете использовать свойство с именем commitByProject, так как maven-release-plugin 2.0-beta-5, которое позволяет вам фиксировать для каждого проекта каждый подмодуль (также работает из корневого модуля с помощью стратегии 'git submodule add').

mvn release:prepare -DcommitByProject=true
0 голосов
/ 14 октября 2018

Я знаю, что уже поздно для ответа, но я столкнулся с той же проблемой, и единственное решение, в котором вы могли бы реализовать как многомодульный проект Maven, так и независимые выпуски для каждого модуля, - это когда вы делаете следующее:

  1. Для мультимодульного проекта maven настройка проекта GIT
  2. Для каждого модуля maven в (1) добавить подмодуль GIT в (1)
  3. Свяжите каждый подмодуль GIT (2) с собственным проектом GIT

По сути, в git каждый модуль maven будет существовать как собственный проект. Для родительского проекта maven будет отдельный проект git, но он не будет содержать фактические модули, только ссылки подмодуля git на место, где хранятся фактические проекты.

0 голосов
/ 10 мая 2017

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

<!--module pom.xml-->
<scm>
    <connection>${project.parent.scm.connection}</connection>
    <developerConnection>${project.parent.scm.developerConnection}</developerConnection>
</scm>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...