Многомодульный проект Maven: дочерний элемент C требует дочернего элемента B, но ошибка сборки сообщает, что родительский элемент A не найден

У меня проблема при создании определенного модуля моих проектов Maven. Структура проекта такая:

импортер данных (родитель A)

|____ весенняя партия (ребенок B, баночка)

|____ докер (ребенок C)

Я использую IntelliJ (но пробовал с CLI и тем же поведением) для сборки, когда я строю из родительского pom, проблем нет, но когда я пытаюсь собрать сначала spring-batch, а затем docker, у меня есть текущая ошибка:

Could not find artifact ***.****.****.****:data-importer:pom:develop in nexus (http://**********/repository/maven-dev-group/)

Я не знаю, почему он пытается получить родительский pom, даже если я определил относительный путь в дочерних POM.

У меня есть следующий POM (без конфиденциальных частей):

импортер данных (родитель A)

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <groupId>*******</groupId>
   <artifactId>data-importer</artifactId>
   <version>develop</version>
   <packaging>pom</packaging>
   <name>data-importer</name>

   <description>data importer application for *</description>

   <parent>
      <groupId>*****.*****.******</groupId>
      <artifactId>super-pom</artifactId>
      <version>2.2.1-SNAPSHOT</version>
      <relativePath/>
   </parent>

   <properties>
      some versions
   </properties>

   <modules>
      <module>spring-batch</module>
      <module>docker</module>
   </modules>

   <dependencies>
      <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-all</artifactId>
         <scope>compile</scope>
      </dependency>
   </dependencies>

   <dependencyManagement>
      <dependencies>
         <dependency>
            <groupId>*.*.*.*</groupId>
            <artifactId>data-importer-spring-batch</artifactId>
            <version>${project.version}</version>
         </dependency>
      </dependencies>
   </dependencyManagement>

</project>

**весенняя партия (ребенок А) **

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>****.****.**.***</groupId>
        <artifactId>data-importer</artifactId>
        <version>develop</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>data-importer-spring-batch</artifactId>
    <version>develop</version>
    <packaging>jar</packaging>
    <name>spring-batch</name>

    <description>data importer application for *</description>

    <dependencies>
        some dependencies
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <executions>
                    <execution>
                        <id>data-importer</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            one dependency
        </dependencies>
    </dependencyManagement>

</project>

докер (ребенок С)

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>*.*.*.*</groupId>
        <artifactId>data-importer</artifactId>
        <version>develop</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>scpas-import</artifactId>
    <version>develop</version>
    <packaging>pom</packaging>
    <name>docker</name>

    <description>data importer application for docker</description>

    <profiles>
        <!-- Profil commun pour générer les images docker -->
        <profile>
            <id>docker</id>
            <build>
                <finalName>${project.artifactId}</finalName>
                <plugins>
                    <!--Copy du jar spring batch dans target/docker/volumes/transferdata/import/data-importer -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>copy-data-importer-jar-files</id>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                                <phase>generate-resources</phase>
                                <configuration>
                                    <includeGroupIds>*.*.*.*</includeGroupIds>
                                    <includeArtifactIds>data-importer-spring-batch</includeArtifactIds>
                                    <type>jar</type>
                                    <outputDirectory>
                                        ${project.build.directory}/docker/volumes/transferdata/import/data-importer/
                                    </outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>copy-resources</id>
                                <phase>process-resources</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>${project.build.directory}/docker</outputDirectory>
                                    <resources>
                                        <resource>
                                            <directory>${basedir}/database</directory>
                                            <filtering>true</filtering>
                                            <includes>
                                                <include>**/*</include>
                                            </includes>
                                        </resource>
                                        <resource>
                                            <directory>${basedir}/data-importer</directory>
                                            <filtering>true</filtering>
                                            <includes>
                                                <include>**/*</include>
                                            </includes>
                                        </resource>
                                        <resource>
                                            <directory>${basedir}</directory>
                                            <filtering>true</filtering>
                                            <includes>
                                                <include>Dockerfile</include>
                                            </includes>
                                        </resource>
                                        <resource>
                                            <directory>${basedir}</directory>
                                            <filtering>true</filtering>
                                            <includes>
                                                <include>docker-compose.data-importer.yml</include>
                                            </includes>
                                        </resource>
                                        <resource>
                                            <directory>${basedir}</directory>
                                            <filtering>true</filtering>
                                            <includes>
                                                <include>docker-entry-point.sh</include>
                                            </includes>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <!--Génération de image docker-->
                    <plugin>
                        <groupId>com.spotify</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>build-image</id>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                                <configuration>
                                    <dockerDirectory>${project.build.directory}/docker</dockerDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>
                docker-push
            </id>
            some steps to push image in our registry
        </profile>
    </profiles>

    <dependencies>
        <dependency>
            <groupId>*.*.*.*</groupId>
            <artifactId>data-importer-spring-batch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <scope>compile</scope>
        </dependency>
    </dependencies>

</project>

Любая идея, почему он пытается получить родительский POM из реестра? (Я не хочу использовать это как зависимость mvn)

Спасибо

Я пробовал некоторые трюки в settings.xml, чтобы никогда не извлекать моментальные снимки и выпуски из реестра, но ничего не работает, кроме создания полного проекта из родительского POM.

Вы пробовали бегать mvn install?

Turing85 25.11.2022 11:05

Конечно, сначала я делаю чистую установку на весеннем пакете, затем чистую установку на докере, и вот здесь у меня описанная ошибка (ошибка не возникает при чистой установке на родительском pom)

Alex 25.11.2022 11:13
mvn -pl docker --also-make install (из корня проекта) должен заставить maven создавать родственные модули, от которых зависит текущий модуль.
Turing85 25.11.2022 11:15

Спасибо за ваш ответ, но, как я уже сказал, я пытаюсь собрать каждый модуль отдельно (конечная цель — завершить реализацию CI/CD с одним заданием для каждого модуля). Создание полного проекта из корня проекта работает (и именно поэтому я в настоящее время есть в моей очереди)

Alex 25.11.2022 11:17

Моя команда выше создает только модуль docker (+ его зависимости). Если мы хотим построить все один раз и только один раз, нам нужно больше информации о настройке всего конвейера.

Turing85 25.11.2022 11:19

В каком модуле вы получаете эту ошибку: Could not find artifact ***.****.****.****:data-importer:pom:develop не показывает информацию о необходимости ... также обычно в консоли больше информации в таких случаях ...

khmarbaise 25.11.2022 11:35

У меня есть эта ошибка при попытке очистить докер модуля установки:

Alex 25.11.2022 11:40

[ОШИБКА] Не удалось выполнить цель проекта scpas-import: не удалось разрешить зависимости для проекта ..*.*:scpas-import:pom:1.0.0-SNAPSHOT: не удалось собрать зависимости в ..*.*:data- importer-spring-batch:jar:1.0.0-SNAPSHOT: не удалось прочитать дескриптор артефакта для ..*.*:data-importer-spring-batch:jar:1.0.0-SNAPSHOT: не удалось найти ..*.* :data-importer:pom:1.0.0-SNAPSHOT в http://****:*/repository/maven-dev-group/ был кэширован в локальном репозитории, разрешение не будет повторяться до тех пор, пока не истечет интервал обновления nexus истекло или обновление принудительно -> [Справка 1]

Alex 25.11.2022 11:40

(Я попытался изменить версию с помощью «SNAPSHOT», чтобы увидеть, есть ли специальные политики в реестре моей компании. Я пытался установить «updatePolicy» так, чтобы никогда не использовать моментальные снимки в моем файле settings.xml, но без изменений.

Alex 25.11.2022 11:41

Во-первых, data-importer-spring-batch запрашивается в конфигурации вашего плагина зависимостей, но отсутствует как зависимость в модуле: scpas-import, что означает, что Maven не может определить правильный порядок сборки...

khmarbaise 25.11.2022 11:42

Что такое мой «реактор»? Извините за вопрос новичка, я обычно не работаю с Maven. Но я проверяю свой локальный .m2/репозиторий, и после сборки spring-batch он у меня есть в моем репо. Просто не понимаю, почему он пытается получить data-importer:pom (родитель)

Alex 25.11.2022 11:44

Лучше всего было бы сделать пример проекта на Github

khmarbaise 25.11.2022 11:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
12
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку доступ к родительскому POM предоставляется, вы можете просто предварительно установить его локально.

Это решит поиск родительского репозитория.

Что вам нужно, так это вызвать Maven с опцией -N (нерекурсивно) mvn install -N, и тогда вы сможете ее использовать.

Большое спасибо, приятель, еще один час, и я бы сдался, но твой трюк идеально подходит для моего случая!

Alex 25.11.2022 11:56

Другие вопросы по теме