Есть три модуля и корневой проект (начало):
/inception
/modules
/base (common parent of 'core' and 'facade')
/core (child of 'base')
/facade (child of 'base' having 'core' as a dependency)
Выполнение mvn package
из inception
работает как положено — все 3 *.jar
артефакта создаются в соответствующих target
папках.
Я хотел бы иметь возможность сборки модуля facade
отдельно.
К сожалению, mvn package
from modules/facade
не может собрать зависимости и завершается с ошибкой
[ERROR] Failed to execute goal on project sample-facade:
Could not resolve dependencies for project sample.group:sample-facade:jar:0.0.1:
Failed to collect dependencies at sample.group:sample-core:jar:0.0.1:
Failed to read artifact descriptor for sample.group:sample-core:jar:0.0.1:
Could not transfer artifact sample.group:sample-base:pom:${revision}
Поверхностная проблема заключается в том, что ${revision}
не превращается в 0.0.1
.
Не могли бы вы помочь мне решить эту проблему?
@Zinc Спасибо за ссылку. Но это не подходит к проблеме, которая возникает из-за неразрешенного свойства revision
.
Может быть это ваша проблема. Какую версию maven вы используете?
Отвечает ли это на ваш вопрос? Проблема Maven для сборки одного модуля с использованием свойства ревизии
@Zinc Это maven 3.6.1+, как описано в минимальном примере README github.com/diziaq/sample-maven-modular-revision
@BrianTompsett-汤莱恩 yes
Очень важно прочитать документацию по ci до конца и добавить flatten-maven-plugin, который не является частью вашего pom... Кроме того, в вашем примере отсутствует родительский элемент, потому что у вас есть один уровень каталога без файла pom github .com/diziaq/sample-maven-modular-revision/tree/main/… ... что означает, что все подмодули должны быть перемещены на один уровень вверх в иерархии каталогов...
@khmarbaise Большое спасибо. Да, flatten-maven-plugin
это ключ. Но иерархия каталогов на проблему не влияет — проект можно построить с заданной структурой. Единственным предварительным условием является установка core
и base
в локальном репозитории maven перед вызовом package
на facade
.
Если вам нужно install
, то ваша сборка сломана... структура каталогов является одной из проблем. Это облегчит вам работу ... Почему facade
base
является родителем? а не уровнем выше? И настроить все в корне github.com/diziaq/sample-maven-modular-revision/blob/main/… ? Вы, кажется, неправильно поняли многомодульную сборку....
flatten-maven-plugin
решает проблему.
Спасибо @khmarbaise, который посоветовал в комментариях дочитать документы до конца.
Добавление плагина в /modules/base/pom.xml
решило проблему с отдельной сборкой подмодуля:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.2.5</version>
<configuration>
<updatePomFile>true</updatePomFile>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
Перед началом фазы модуля facade
необходимо иметь base
и core
в локальном репозитории, чтобы maven мог найти артефакты. Следовательно, вот последовательность действий в root:
mvn install -pl modules/base,modules/core
(или просто mvn install
)mvn package -pl modules/facade
Я рекомендую документы, потому что я их написал... ;-)
Отвечает ли это на ваш вопрос? Модули Maven + создание отдельного конкретного модуля