Я пытаюсь выпустить отдельные модули многомодульного -проекта, содержащегося в одном репозитории git.
Структура папок выглядит примерно так:
|- api/pom.xml
|- database/pom.xml
|- core/pom.xml
pom.xml
Родительский pom просто используется как способ построения всех подкомпонентов таким образом, который имеет смысл при использовании тега <modules>
. По сути, создание API, затем базы данных, затем ядра.
Проект изначально размещался в SVN, и, просто указав разные пути в репозитории в теге maven scm
, было легко заставить команды maven release
работать хорошо. Кажется, это не относится к Git.
При запуске mvn release:prepare
он вносит необходимые изменения в pom API, но при выполнении mvn release:perform
он пытается построить родительский pom и не может собрать пакет базы данных из-за неспособности разрешить зависимость моментального снимка API -, которая указан в базе данных/pom.xml.
Как настроить теги scm, чтобы иметь возможность выпускать определенный модуль в репозитории Git? Это вообще возможно?
Вот пример настройки того, как выглядят файлы pom:
родитель pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.findwise.hydra</groupId>
<artifactId>hydra-parent</artifactId>
<version>0.2.0</version>
<packaging>pom</packaging>
<modules>
<module>api</module>
<module>database</module>
<module>core</module>
</modules>
</project>
API/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.findwise.hydra</groupId>
<artifactId>hydra-api</artifactId>
<packaging>jar</packaging>
<version>0.2.0</version>
<name>${project.artifactId}</name>
<description>Hydra API</description>
<licenses>
...
</licenses>
<scm>
...
</scm>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
...
</dependencies>
<build>
<finalName>${project.name}</finalName>
<plugins>
...
</plugins>
</build>
</project>
database
pom очень похож на api
, но зависит от api
. То же самое касается core
, которая зависит отdatabase
(и через него, наapi
).
Артефакты api
и database
сами по себе важны, поскольку api
определяет клиентский API и database
внутренний API, оба из которых используются для интеграции с приложением. Из этого вытекает первоначальная мысль о выпуске их по отдельности --.