Не удалось разрешить зависимости с помощью иерархии maven и пользовательского репозитория в проекте

#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, а не все дочерние модули.