Как уже упоминалось - вы сталкиваетесь с круговой зависимостью между вашими модулями.Эта зависимость должна быть устранена.Это проблема не только для Maven, но и является источником случайной сложности, которой следует избегать.
Чтобы устранить циклическую зависимость, я вижу три подхода:
1) Представить3-й модуль, например exist-common
.Тогда ваш порядок компиляции будет exist-common
, exist-testkit
, а затем exist-core
.Однако, как вы упомянули, это потребует огромного рефакторинга, который вы не хотите делать по крайней мере сейчас.
Чтобы прояснить ситуацию, предполагается, что это преобразование:
- Зависимости перед рефакторингом:
---------->
exist-core exist-testkit
<----------
- Зависимости после рефакторинга:
exist-core -------------------------->
| exist-common
---------> exist-testkit ---------->
2) Создайте однонаправленную зависимость, так что exist-core
будетзависит от exist-testkit
.Однако это вынуждает вас дублировать код между модулями, что не является разумной идеей.
3) Определите ваши exist-core
тесты (в настоящее время под exist-core/src/test/java
) как отдельный модуль.Итак, у вас будет exist-core-main
и exists-core-test
модулей.Тогда ваш порядок компиляции будет: exist-core-main
, exist-testkit
, а затем exist-core-test
.
Последний подход имеет преимущество, заключающееся в том, что вы просто обновите maven-конфиги и измените структуру каталогов.Таким образом, не будет необходимости проводить серьезный рефакторинг.Однако из-за этого структура проекта выглядит непоследовательной.
Если вы выберете третий подход, вам нужно будет сделать следующее:
Переместить основные тесты в отдельный каталог exists-core-test
в корневом каталоге проекта.
Обновите ваш родительский pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>your.group.id</groupId>
<artifactId>your-artifact-id</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>exist-core-main</module>
<module>exist-testkit</module>
<module>exist-core-test</module>
<!-- Other modules -->
</modules>
<!-- Other relevant configurations -->
</project>
Сделайте ваш
exist-core-test
pom.xml примерно таким:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>your.group.id</groupId>
<artifactId>exist-core-test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>your.group.id</groupId>
<artifactId>exist-core-main</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>your.group.id</groupId>
<artifactId>exist-testkit</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<!-- Other dependencies -->
</dependencies>
<!-- Other relevant configurations -->
</project>