Maven mit einem expliziten finalName funktioniert nicht richtig

1. Hintergrun

Mein Maven-Projekt hat viele Module und Submodule mitjars undwars und alles funktioniert. Ich kann es auch problemlos auf dem Server bereitstellen.

Ich habe mich entschieden @ zu folgdiese Maven-Namenskonvertierung, Ich mache einige Tests mitproject.name undproject.build.finalName um einen passenden Namen zu haben.

Das Muster, das ich definiert habe, um @ zu erstellproject.name für das Wurzelartefakt istcompany-${project.artifactId} und für die Module und Submodule ist${project.parent.name}-${project.artifactId}:

Firma-any-Artefakt-any-Modul1 Firma-jedes-Artefakt-jedes-Modul2-jedes-Submodul1 Firma-jedes-Artefakt-jedes-Modul2-jedes-Submodul2

Das Muster fürproject.build.finalName ist${project.name}-${project.version}:

company-any-artifact-any-module1-1.0.jar company-any-artifact-any-module2-any-submodule1-2.0.jar company-any-artifact-any-module2-any-submodule2-3.0.war

Aber anstatt diese Dateien zu produzieren, gibt mir maven einStackOverflowError.

2. Das Beispiel zum Reproduzieren des Fehlers

Sie können dieses Beispiel von github klonen:https: //github.com/pauloleitemoreira/company-any-artifac

n Github gibt es dasmaster branch, der diesen Fehler reproduziert. Und da istonly-modules branch, das ist ein funktionierendes Beispiel, das @ verwend${project.parent.name} um das Glas zu generierenfinalName wie ich will

Betrachten wir ein Maven-Projekt mit einem Root-Pom-Artefakt, einem Pom-Modul und einem Submodul.

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

2.1 beliebiges Artefakt

<?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 any-module

<?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 beliebiges Submodul

<?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. Proble

Wenn Sie versuchen,mvn clean install, Maven gibt mir einStackOverflowError:

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)

Es ist wichtig zu wissen, dass der Fehler nur auftritt, wenn wir mit Submodulen arbeiten. Wenn wir ein Projekt mit einem Root-POM-Artefakt und einem JAR-Modul erstellen, tritt der Fehler nicht auf.

4. Die Frag

Warum tritt dieser Fehler nur auf, wenn Submodule verwendet werden?

Irgendein Vorschlag, um mein Problem zu lösen? Soll ich es vergessen und @ setzproject.name undproject.build.fileName manuell für jedes Projekt nach dem von mir gewünschten Muster?

WICHTIG AKTUALISIERT:

Einige Antworten sagen nur, um @ zu verwend&{parent.name}, aberes funktioniert nich. Bitte, es ist eine Frage mit einem Kopfgeld, prüfen Sie Ihre Lösung mitMaven version 3.3.9, bevor Sie diese Frage beantworten.

Maven Version 3.3.9

Bearbeite - Wenn der Frage mit der Phase, in der der Fehler auftritt, Details hinzugefügt werden, funktioniert alles einwandfrei, bis dasprepare-package -Phase, aber der StackOverflow tritt am @ apackage Phase des Maven-Lebenszyklus für das Projekt.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage