Я запускаю проект Maven с унаследованными poms.
Родительский pom проекта имеет вид:
<artifactId>service-parent</artifactId>
<groupId>group.parent</groupId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>child-of-parent</module> ...
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
...
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
...
</dependencies>
</dependencyManagement>
Так что в дочернем модуле, если я правильно понимаю, зависимости в части будут наследоваться автоматически, а зависимости в части будутдолжны быть объявлены в детском пом.И я пишу это в pom ребенка:
<parent>
<artifactId>service-parent</artifactId>
<groupId>group.parent</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>service-child</artifactId>
<groupId>group.child</groupId>
<packaging>pom</packaging>
<modules>
<module>child-of-child</module>
</modules>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
</dependencies>
Этот дочерний модуль имеет свои дочерние модули.Pom третьего уровня, таким образом, является ударом:
<parent>
<artifactId>service-child</artifactId>
<groupId>group.child</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>service-child-child</artifactId>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>service-child</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
Он немного похож на проводку, так как в начале pom у него уже есть тег, который совпадает с его зависимостью.Это потому, что если я копирую зависимости в его родительский элемент, появляется двойное предупреждение.И когда я запускаю maven clean install
, он говорит:
Не удалось выполнить цель для проекта service-child: Не удалось разрешить зависимости для проекта service-parent: service-child: jar: 1.0-SNAPSHOT: TheСледующие артефакты не могут быть разрешены: group.child: service-child: jar: 1.0-SNAPSHOT, group.parent: service-parent: jar: 1.0-SNAPSHOT: Не удалось найти артефакт group.child: service-child: jar: 1.0-SNAPSHOT
Я знаю, что это способ агрегации, а не наследования, но я предпочитаю этот способ в будущем, я хотел бы протестировать и запустить модуль за модулем (я попытался, кстати, путем наследования, удалив модулиобъявление в родительских англичанах и это сработало).Ты хоть представляешь, почему это произошло?