Подстановка свойства Maven для URL репозитория не происходит, если определен родительский pom - PullRequest
1 голос
/ 08 января 2020

У меня проблема с тем, что maven неправильно подставляет свойства в URL моего репозитория, если и только если определен родительский pom. Это особенно проблема, потому что родительский pom находится в удаленном хранилище, поэтому мне нужно определить родительский 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.group</groupId>
    <artifactId>parent-artifact</artifactId>
    <version>1.0.0</version>
    <relativePath/>
  </parent>

  <groupId>com.group</groupId>
  <artifactId>project-artifact</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <name>project</name>
  <description>test project</description>

  <properties>
    <nexus.url>https://nexus.myorganization.net</nexus.url>
  </properties>

  <repositories>
    <repository>
      <id>nexus-server</id>
      <url>${nexus.url}/repository/maven-releases/</url>
    </repository>
  </repositories>

</project>

Используя этот pom, я получаю сообщение об ошибке Cannot access ${nexus.url}/repository/maven-snapshots/..., поэтому очевидно, что оно не заменяет свойство фактическим значением.

Если я удаляю секцию <parent> в 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.group</groupId>
  <artifactId>project-artifact</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <name>project</name>
  <description>test project</description>

  <properties>
    <nexus.url>https://nexus.myorganization.net</nexus.url>
  </properties>

  <repositories>
    <repository>
      <id>nexus-server</id>
      <url>${nexus.url}/repository/maven-releases/</url>
    </repository>
  </repositories>

  <!-- adding this dependency so that Maven is forced to download from the repository -->
  <dependencies>
    <!-- some dependency here -->
  </dependencies>

</project>

Я знаю, что она работает правильно, потому что я вижу в выводе maven строку Downloading from nexus-server: https://nexus.myorganization.net/repository/maven-releases/...

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Благодаря комментаторам причина в том, что разрешение свойства не происходит до тех пор, пока родительский pom не будет разрешен, поэтому между текущим pom и родительским pom не возникает конфликтов свойств.

0 голосов
/ 08 января 2020

Я думаю, что у вас неправильный тег в определении родителя. Почему существует тег относительного пути?

просто удалите тег: и попробуйте снова

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...