Maven с явным finalName не будет работать должным образом

1. Фон

Мой проект Maven имеет много модулей и субмодулей сjars а такжеwars и все работает. Я также могу развернуть его на сервере без каких-либо проблем.

Я решил следоватьэто преобразование имен MavenЯ делаю некоторые тесты сproject.name а такжеproject.build.finalName иметь подходящее имя.

Шаблон, который я определил для созданияproject.name для корневого артефактаcompany-${project.artifactId} и для модулей и субмодулей${project.parent.name}-${project.artifactId}:

Компания-любой-артефакт любой-module1Компания-любой-артефакт любой-module2-любой-submodule1Компания-любой-артефакт любой-module2-любой-submodule2

Шаблон дляproject.build.finalName является${project.name}-${project.version}:

Компания-любой-артефакт любой-module1-1.0.jarКомпания-любой-артефакт любой-module2-любой-submodule1-2.0.jarКомпания-любой-артефакт любой-module2-любой-submodule2-3.0.war

Но вместо того, чтобы создавать эти файлы, Maven дает мнеStackOverflowError.

2. Пример для воспроизведения ошибки

Вы можете клонировать этот пример из github:https://github.com/pauloleitemoreira/company-any-artifact

В github естьmaster ветка, которая будет воспроизводить эту ошибку. И естьonly-modules ветвь, это рабочий пример, который использует${project.parent.name} создать банкуfinalName как я хочу.

Давайте рассмотрим проект maven с одним артефактом root pom, одним модулем pom и одним подмодулем.

-any-artifact
     |
     |-any-module      
           |
           |-any-submodule

2.1 любой артефакт

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>any-artifact</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <name>company-${project.artifactId}</name>

    <modules>
        <module>any-module</module>
    </modules>

    <!-- if remove finalName, maven will not throw StackOverflow error -->
    <build>
        <finalName>${project.name}-${project.version}</finalName>
    </build>
</project>

2.2 любой модуль

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>any-artifact</artifactId>
        <groupId>com.company</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.company.any-artifact</groupId>
    <artifactId>any-module</artifactId>
    <packaging>pom</packaging>

    <name>${project.parent.name}-${project.artifactId}</name>

    <modules>
        <module>any-submodule</module>
    </modules>
</project>

2.3 любой субмодуль

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>any-module</artifactId>
        <groupId>com.company.any-artifact</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.company.any-artifact.any-module</groupId>
    <artifactId>any-submodule</artifactId>

    <name>${project.parent.name}-${project.artifactId}</name>
</project>

3. Проблема

Когда пытаютсяmvn clean installМавен дает мнеStackOverflowError:

Exception in thread "main" java.lang.StackOverflowError
    at org.codehaus.plexus.util.StringUtils.isEmpty(StringUtils.java:177)
    at org.codehaus.plexus.util.introspection.ReflectionValueExtractor.evaluate(ReflectionValueExtractor.java:194)
    at org.codehaus.plexus.util.introspection.ReflectionValueExtractor.evaluate(ReflectionValueExtractor.java:163)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:266)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:143)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:174)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:143)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:429)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:143)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:174)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:143)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:429)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:143)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:174)
    at org.apache.maven.plugin.PluginParameterExpressionEvaluator.evaluate(PluginParameterExpressionEvaluator.java:143)

Важно знать, что ошибка возникает только тогда, когда мы работаем с подмодулями. Если мы создадим проект с корневым артефактом POM и модулем jar, ошибка не возникнет.

4. Вопрос

Почему эта ошибка возникает только тогда, когда мы используем субмодули?

Любое предложение, чтобы решить мою проблему? Должен ли я забыть это и установитьproject.name а такжеproject.build.fileName вручную для каждого проекта, следуя шаблону, который я хочу?

ВАЖНО ОБНОВЛЕНО:

Некоторые ответы просто говорят, чтобы использовать&{parent.name}, ноэто не работает, Пожалуйста, это вопрос с вознаграждением, рассмотрите возможность тестирования вашего решения сMaven version 3.3.9Прежде чем ответить на этот вопрос.

Maven версия 3.3.9

редактировать - Добавление деталей к вопросу с этапом, когда возникает ошибка, все работает нормально, покаprepare-package фаза, но StackOverflow происходит наpackage фаза жизненного цикла Maven для проекта.

Ответы на вопрос(5)

Ваш ответ на вопрос