Как решить проблему зависимости родительского pom: не удалось прочитать дескриптор артефакта; Не можете найти артефакт? - PullRequest
0 голосов
/ 04 сентября 2018

Недавно я опубликовал три артефакта для Maven Central: https://search.maven.org/search?q=ced2ar3-rdb

Три являются частью того же проекта и публикуются одновременно.

Я сейчас пытаюсь построить новый проект, используя ced2ar-rdb и ced2ar-rdb-tests в качестве зависимостей, но не там, где в моем коде я ссылаюсь на родительский файл pom (ced2ar3-rdb-parent; я не на самом деле хочу использовать его и не думал, что мне это нужно). Однако, когда я пытаюсь построить свой проект, который использует ced2ar-rdb в качестве зависимости, я получаю эту ошибку:

[ERROR] Failed to execute goal on project ced2ar3-services-core: Could not resolve dependencies for project edu.cornell.
ncrn.ced2ar:ced2ar3-services-core:jar:0.0.0: Failed to collect dependencies at edu.cornell.ncrn.ced2ar:ced2ar3-rdb:jar:0
.0.1: Failed to read artifact descriptor for edu.cornell.ncrn.ced2ar:ced2ar3-rdb:jar:0.0.1: Could not find artifact edu.
cornell.ncrn.ced2ar:ced2ar3-rdb-parent:pom:${ced2ar.version} in central (https://repo.maven.apache.org/maven2) -> [Help   

Связана ли эта проблема с тем фактом, что у меня <version>${ced2ar.version}</version> в родительском поме, даже если ${ced2ar.version} выглядит правильно определенным в <properties> ниже в файле?

1 Ответ

0 голосов
/ 04 сентября 2018

Это проблема, связанная с тем, что у меня есть $ {ced2ar.version} в родительском pom, хотя $ {ced2ar.version} выглядит правильно определенным в дальнейшем вниз в файле?

Нет, проблема связана с тем, как вы объявили дочерние модули.
Вот выдержка из модуля rdb pom .

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ced2ar3-rdb-parent</artifactId>
        <groupId>edu.cornell.ncrn.ced2ar</groupId>
        <version>${ced2ar.version}</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ced2ar3-rdb</artifactId>

</project>

Свойство ${ced2ar.version}, определенное в родительской версии дочернего проекта, не может быть разрешено без построения реакторного проекта, который сначала создает родительский pom, который определяет это свойство. Вот почему ваша сборка работает в разработке (с реактором), но не работает без нее.

Для решения вашей проблемы вы можете использовать стандартное свойство revision с flatten-maven-plugin, которое поможет вам установить уникальную версию между родителем и ребенком.

Ваш реактор может выглядеть так:

<project>
  <modelVersion>4.0.0</modelVersion>     
  <groupId>my-group</groupId>
  <artifactId>my-parent</artifactId>
  <version>${revision}</version>
  ...
  <properties>
    <revision>1.0.0</revision>
  </properties>
  <modules>
    <module>rdb</module>
    <module>rdb-tests</module>
    ..
  </modules>

 <build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>flatten-maven-plugin</artifactId>
      <version>1.0.0</version>
      <configuration>
        <updatePomFile>true</updatePomFile>
      </configuration>
      <executions>
        <execution>
          <id>flatten</id>
          <phase>process-resources</phase>
          <goals>
            <goal>flatten</goal>
          </goals>
        </execution>
        <execution>
          <id>flatten.clean</id>
          <phase>clean</phase>
          <goals>
            <goal>clean</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
  </build>
</project>

И, например, rdb pom.xml:

<project>
  <parent>
    <groupId>my-group</groupId>
    <artifactId>my-parent</artifactId>
    <version>${revision}</version>
  </parent>

  <artifactId>rdb</artifactId>
   ...
</project>

О вашем комментарии:

Я получаю неверную ошибку POM с: «Отсутствует имя проекта, Проект отсутствует описание, отсутствует URL проекта, отсутствует URL SCM, разработчик информация отсутствует ». Действительно, после проверки сформированного .flatten-pom.xml, я не вижу этих полей

ожидается, что плоский плагин удаляет некоторые метаданные исходного POM :

Сглаженное POM - это уменьшенная версия оригинального POM с сосредоточиться, чтобы содержать только важную информацию для ее потребления. Поэтому информация, которая требуется только для обслуживания Разработчики и для создания проекта артефакт (ы) лишены . начало отсюда мы указываем, как сплющенный POM создается из оригинальное ПОМ и его проект

Но вы можете переопределить это значение по умолчанию, добавив элементы, которые вы не хотите удалять, в параметре pomElements плагина.
Например:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>flatten-maven-plugin</artifactId>
    <version>1.0.0</version>
    <configuration>
        <updatePomFile>true</updatePomFile>
        <pomElements>
            <name/>
            <description/>
            <developers/>
            <contributors/>
            <url/>
            <scm/>
        </pomElements>                  
    </configuration>
    <executions>
        <execution>
            <id>flatten</id>
            <phase>process-resources</phase>
            <goals>
                <goal>flatten</goal>
            </goals>
        </execution>
        <execution>
            <id>flatten.clean</id>
            <phase>clean</phase>
            <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
</plugin>
...