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}
:
Das Muster fürproject.build.finalName
ist${project.name}-${project.version}
:
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.