Как настроить проект Multi-Module Maven с правильной структурой выпуска и версии
-
14-10-2019 - |
Вопрос
Я не смог найти лучшую практику для моего многомодульного проекта Maven, с точки зрения версий, выпуска и Osgi Bundles,
Прежде всего, управление версиями и резом. Мой проект имеет 5-6 подмодулей с 200+ банками, поэтому хотели использовать агрегацию,
Случай 1: не указывать версии проекта и использовать родительскую версию
В этом случае, если я использую плагин Maven Release как тегинг, так и pom.next в порядке для разработки (OK означает, что JAR3 всегда будет использовать последнюю версию JAR1, которая сама по себе), но что, если мне нужно сделать патч -рецензирование только для JAR1? Как я могу сделать RELASE (он говорит, что не может выпустить проект из-за не выпущенных зависимостей. Родитель: 0,0,2-снапсшот), и если мне удастся выпустить JAR1 0.0.1.1, как сказать JAR3, чтобы использовать исправленную версию JAR1?
Родительский ProeJct (0,0,1-снапшот)
Модуль1
Jar1
Jar2
Модуль2
Jar3
(Зависимости) [jar1 (project.version), jar2 (project.version)]
Jar4
(Зависимости) [jar1 (project.version), jar3 (project.version)]
Случай 2: Может быть, это хорошая идея указать версии JAR в файле свойств родительского POM
В этом случае, когда я не сожалею использование плагина освобождения, когда я проверяю pom.next, я вижу, что как версия, так и версии JAR и версии зависимости возвращаются в жесткий кодирование вместо свойства (jar1.version), так что для следующего выпуска я не смогу использовать свойства и и Вторая проблема в том, что мне даже удается решить 1 -ю задачу плагин Maven Lelepry не изменяет свойства, поэтому в следующем выпуске будут использоваться немодифицированные версии из свойств
Родительский ProeJct
Характеристики
jar1.version
Jar2.version
Jar3.version
Jar4.version
Модуль1
Jar1 (jar1.version)
Jar2 (jar2.version)
Module2 (0,0,1-снапшот)
Jar3 (jar3.version)
(Зависимости) [Jar1, jar2
JAR4 (0,0,1-снапшот)
(Зависимости) [JAR1, JAR3
Я немного смущен, не думал, что процедура RELASE и Patch будет такой сложной, какой лучший способ управлять такими требованиями с Maven
Решение
Наконец, мне удалось поддержать управление выпуском (версия) для моего многомодульного проекта с // DeperencyManagement
Мой родительский помп
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.seyn</groupId>
<artifactId>hophop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>hophop</name>
<scm>
<connection></connection>
<developerConnection></developerConnection>
<url></url>
</scm>
<properties>
<hophop1.version>0.0.1-SNAPSHOT</hophop1.version>
<hophop2.version>0.0.1-SNAPSHOT</hophop2.version>
</properties>
<modules>
<module>../hophop1</module>
<module>../hophop2</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.1</version>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
<version>${hophop1.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
и мой модуль 1 Pom:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hophop</artifactId>
<groupId>com.seyn</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\hophop</relativePath>
</parent>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scm>
<connection>seyn</connection>
<developerConnection>seyn</developerConnection>
<url>seyn</url>
</scm>
</project>
и мой модуль 2 POM, который зависит от модуля 1:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>hophop</artifactId>
<groupId>com.seyn</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>..\hophop</relativePath>
</parent>
<groupId>com.seyn</groupId>
<artifactId>hophop2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scm>
<connection>seyn</connection>
<developerConnection>seyn</developerConnection>
<url>seyn</url>
</scm>
<dependencies>
<dependency>
<groupId>com.seyn</groupId>
<artifactId>hophop1</artifactId>
</dependency>
</dependencies>
</project>