#java #maven
#java #maven
Вопрос:
У меня проблема с иерархией maven и пользовательским репозиторием в проекте.
Это родительский файл POM:
<project xmlns="http://maven.apache.org/POM/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/1.0.0 http://maven.apache.org/xsd/maven-1.0.0.xsd">
<modelVersion>1.0.0</modelVersion>
<groupId>groud-id</groupId>
<artifactId>parent-id</artifactId>
<version>4.0.0</version>
<packaging>pom</packaging>
<properties>
..
</properties>
<modules>
<module>my-common-library</module>
<module>my-module-1</module>
<module>my-module-2</module>
</modules>
<repositories>
<repository>
<id>local-repo</id>
<name>local repo ${}</name>
<url>file://${project.basedir}/../repo</url>
</repository>
</repositories>
</project>
структура папок в основном проекте:
my-common-library
my-module-1
my-module-2
repo
└───com
└───3rd-part
├───3rd-part-lib-1
│ └───4.0
├───3rd-part-lib-2
│ └───4.0
├───3rd-part-lib-3
│ └───4.0
├───3rd-part-lib-4
│ └───4.0
└───3rd-part-lib-5
└───4.0
pom.xml
Я установил модуль ‘my-common-library’ в локальном репозитории, используя команду ‘clean source: jar install’ и проверив в папке $ {user.home} /.m2/ repository/, что установка прошла успешно (так и было).
groud-id
└───my-common-library
│ maven-metadata-local.xml
│
├───3.3
│ m2e-lastUpdated.properties
│ my-common-library-3.3-javadoc.jar.lastUpdated
│ my-common-library-3.3-sources.jar.lastUpdated
│ my-common-library-3.3.jar.lastUpdated
│ my-common-library-3.3.pom.lastUpdated
│
└───4.0.0
m2e-lastUpdated.properties
my-common-library-4.0.0-javadoc.jar.lastUpdated
my-common-library-4.0.0-sources.jar
my-common-library-4.0.0.jar
my-common-library-4.0.0.jar.lastUpdated
my-common-library-4.0.0.pom
my-common-library-4.0.0.pom.lastUpdated
_remote.repositories
Попытка упаковать модуль ‘my-module-1’ с помощью команды ‘clean verify’ выдает ошибку, что он не может найти зависимость ‘my-common-library’ в репозитории ‘local-repo’, полностью игнорируя, что эта зависимость была в локальном репозитории, в частности, ошибка была:
[ERROR] Failed to execute goal on project my-module-1: Could not resolve dependencies for project groud-id:my-module-1:war:4.0.0: Failed to collect dependencies at groud-id:my-common-library:jar:4.0.0: Failed to read artifact descriptor for groud-id:my-common-library:jar:4.0.0: Failure to find groud-id:parent-id:pom:4.0.0 in file://D:dev-customerscustomerworkspaceparent-idmy-module-1/../repo was cached in the local repository, resolution will not be reattempted until the update interval of local-repo has elapsed or updates are forced -> [Help 1]
Честно говоря, это первый раз, когда со мной произошла такая ситуация, возможно, потому, что я впервые попытался использовать иерархическую структуру Maven.
Maven: 3.3.9 (Eclipse EMBEDDED) Java: JDK 1.8.0_271
Комментарии:
1. немного сложно следовать вашему примеру, но он пытается найти
pom
?Failure to find groud-id:LiveDocsES4:pom:1.0.0...
2. @Eugene да, но я не знаю, почему он может разрешить его в ${user.home}/.m2/repository/ folder . Файлы есть!
3. оба
jar
иpom
есть, верно?4. @Eugene да, я отредактировал всю структуру локального репозитория с помощью команды «дерево». все файлы есть!
5. Какие сторонние зависимости? Кроме того, я настоятельно рекомендую использовать менеджер репозитория…
Ответ №1:
Проблема четко указана в сообщении об ошибке:
Не удалось найти groud-id:parent-id:pom:4.0.0 в файле://D:dev-customerscustomer workspaceparent-idmy-module-1/ ../repo
Это означает, что это не выполняло a mvn install
для родительского pom. Это должно быть в репозитории, чтобы иметь возможность правильно разрешать зависимости для общего модуля.
Если вы выполняете a mvn install
из родительского каталога, сначала будет установлен родительский pom, а затем все дочерние модули, как описано в модулях:
<modules>
<module>my-common-library</module>
<module>my-module-1</module>
<module>my-module-2</module>
</modules>
Вы также можете сделать mvn install -N
это в родительской папке, которая установит только родительский pom, а не все дочерние модули.