Это проблема, связанная с тем, что у меня есть
$ {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>