Сборка не выполнена для всех проектов в выпуске многомодульных проектов Maven

#maven #maven-3 #maven-release-plugin

#maven #maven-3 #maven-release-plugin

Вопрос:

У меня возникла проблема со сборкой во время выпуска многомодульных проектов Maven. У меня такая структура:

 parent
|-- potato
|-- lettuce
|-- raddish
 

и я хочу выпустить проекты potato и lettuce. (Они не зависят от радиш моментального снимка.)

Команда, которую я использовал, была:

 mvn release:prepare -pl potato,lettuce ... (tag, versions and so on) -DpushChanges=false
 

и каждый коммит в истории был таким, как я ожидал — один коммит изменил версию как potato, так и lettuce с X-SNAPSHOT на X и один изменил X на Y-SNAPSHOT. Для обоих проектов был создан один тег.

Однако во время выпуска есть две фазы сборки: подготовка — один вызов verify для версии X и один вызов verify для версии Y-SNAPSHOT. На обоих этапах был собран только первый проект, а не второй. (Сначала указывается в аргументе -pl .) То же самое происходит при вызове release:perform . Развертывается только первый проект, все остальное игнорируется.

На этапе подготовки был создан файл release.properties, аналогичный этому (обратите внимание на exec.pomFileName=potato/pom.xml ):

 project.scm.release.test:potato.developerConnection=scm:git:http://localhost:3000/petr/release-test.git
project.scm.release.test:lettuce.connection=scm:git:http://localhost:3000/petr/release-test.git
scm.commentPrefix=[maven-release-plugin]
project.scm.release.test:potato.connection=scm:git:http://localhost:3000/petr/release-test.git
exec.pomFileName=potato/pom.xml
pushChanges=false
releaseStrategyId=default
project.scm.release.test:lettuce.developerConnection=scm:git:http://localhost:3000/petr/release-test.git
scm.tag=33
project.scm.release.test:lettuce.tag=HEAD
remoteTagging=true
scm.branchCommitComment=@{prefix} prepare branch @{releaseLabel}
projectVersionPolicyId=default
scm.url=scm:git:http://localhost:3000/petr/release-test.git
scm.tagNameFormat=@{project.artifactId}-@{project.version}
project.scm.release.test:lettuce.url=http://localhost:3000/petr/release-test.git
pinExternals=false
project.scm.release.test:potato.tag=HEAD
preparationGoals=clean verify
scm.releaseCommitComment=@{prefix} prepare release @{releaseLabel}
exec.snapshotReleasePluginAllowed=false
exec.additionalArguments=-pl=lettuce,potato
project.rel.release.test:potato=33
project.rel.release.test:lettuce=33
project.scm.release.test:potato.url=http://localhost:3000/petr/release-test.git
scm.developmentCommitComment=@{prefix} prepare for next development iteration
scm.rollbackCommitComment=@{prefix} rollback the release of @{releaseLabel}
completedPhase=end-release
 

Есть ли способ выпустить оба проекта, используя только один тег и фиксацию, но собрать как картофель, так и салат (но не редис)?

Я использую плагин выпуска 3.0.0-M1.

Комментарии:

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

2. @9ilsdx9rvj0lo Да, плагин должен создать один коммит и создать один тег, но обновить только указанные проекты. И это делает именно это, если указан -pl . Но я также хочу, чтобы он создавал все, что указано в списке проектов.

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