[
https://issues.apache.org/jira/browse/MNG-8306?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Schmid updated MNG-8306:
-------------------------------
Description:
if combine.children="append" is set in some profile on an element with multiple
children, these children are duplicated.
For example, if <compilerArgs> is set with combine.children="append" for the
maven-compiler-plugin in a profile with
{code:java}
<arg>-Xmaxerrs</arg>
<arg>100</arg>
<arg>-Xmaxwarns</arg>
<arg>100</arg> {code}
then executing the build with that profile results in the following CLI
arguments for javac:
{code:none}
[DEBUG] Command line options:
[DEBUG] -d /home/runner/work/maven-repro/maven-repro/target/classes -classpath
/home/runner/work/maven-repro/maven-repro/target/classes: -sourcepath
/home/runner/work/maven-repro/maven-repro/src/main/java:/home/runner/work/maven-repro/maven-repro/target/generated-sources/annotations:
-s
/home/runner/work/maven-repro/maven-repro/target/generated-sources/annotations
-g --release 17 -encoding UTF-8 -Xmaxerrs 100 100 -Xmaxwarns -Xmaxerrs 100
-Xmaxwarns 100 -XDuseUnsharedTable=true{code}
Since javac doesn't know what to do with "-Xmaxerrs 100 100", it fails to build.
An example of such a profile would be the following:
{code:xml}
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<compilerArgs combine.children="append">
<arg>-Xmaxerrs</arg>
<arg>100</arg>
<arg>-Xmaxwarns</arg>
<arg>100</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
</profile> {code}
If a project like that is run with
{code:none}
mvn clean verify -Ptest {code}
on Maven 4, this will result in the above CLI arguments and a build failure.
Both the full pom.xml as well as the build output are included as attachments.
A full reproducer using GitHub Actions can be found here:
[https://github.com/danthe1st/maven-repro/tree/duplicate-compiler-arg]
Build output:
[https://github.com/danthe1st/maven-repro/actions/runs/11280962017/job/31375110882]
Build output with Maven 3 (works):
[https://github.com/danthe1st/maven-repro/actions/runs/11280962017/job/31375110610]
was:
if a combine.children="append" is set in some profile on an element with
multiple children, these children are duplicated.
For example, if <compilerArgs> is set with combine.children="append" for the
maven-compiler-plugin in a profile with
{code:java}
<arg>-Xmaxerrs</arg>
<arg>100</arg>
<arg>-Xmaxwarns</arg>
<arg>100</arg> {code}
then executing the build with that profile results in the following CLI
arguments for javac:
{code:java}
[DEBUG] Command line options:
[DEBUG] -d /home/runner/work/maven-repro/maven-repro/target/classes -classpath
/home/runner/work/maven-repro/maven-repro/target/classes: -sourcepath
/home/runner/work/maven-repro/maven-repro/src/main/java:/home/runner/work/maven-repro/maven-repro/target/generated-sources/annotations:
-s
/home/runner/work/maven-repro/maven-repro/target/generated-sources/annotations
-g --release 17 -encoding UTF-8 -Xmaxerrs 100 100 -Xmaxwarns -Xmaxerrs 100
-Xmaxwarns 100 -XDuseUnsharedTable=true{code}
Since javac doesn't know what to do with "-Xmaxerrs 100 100", it fails to build.
An example of such a profile would be the following:
{code:java}
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<compilerArgs combine.children="append">
<arg>-Xmaxerrs</arg>
<arg>100</arg>
<arg>-Xmaxwarns</arg>
<arg>100</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
</profile> {code}
If a project like that is run with
{code:java}
mvn clean verify -Ptest {code}
on Maven 4, this will result in the above CLI arguments and a build failure.
Both the full pom.xml as well as the build output are included as attachments.
A full reproducer using GitHub Actions can be found here:
[https://github.com/danthe1st/maven-repro/tree/duplicate-compiler-arg]
Build output:
[https://github.com/danthe1st/maven-repro/actions/runs/11280962017/job/31375110882]
Build output with Maven 3 (works):
[https://github.com/danthe1st/maven-repro/actions/runs/11280962017/job/31375110610]
> combine.children=append duplicating options
> -------------------------------------------
>
> Key: MNG-8306
> URL: https://issues.apache.org/jira/browse/MNG-8306
> Project: Maven
> Issue Type: Bug
> Components: Profiles
> Affects Versions: 4.0.0-beta-4
> Environment: Apache Maven 4.0.0-beta-4
> (697c543b4e3bbec1b99e9d4d1ee8e0302e748f09)
> Maven home: /home/dan1st/dev/tools/maven
> Java version: 21.0.2, vendor: Oracle Corporation, runtime:
> /usr/lib/jvm/graal21
> Default locale: en_US, platform encoding: UTF-8
> OS name: "linux", version: "6.11.0-8-generic", arch: "amd64", family: "unix"
> Reporter: Daniel Schmid
> Priority: Major
> Attachments: job-logs.txt, pom.xml
>
>
> if combine.children="append" is set in some profile on an element with
> multiple children, these children are duplicated.
> For example, if <compilerArgs> is set with combine.children="append" for the
> maven-compiler-plugin in a profile with
> {code:java}
> <arg>-Xmaxerrs</arg>
> <arg>100</arg>
> <arg>-Xmaxwarns</arg>
> <arg>100</arg> {code}
> then executing the build with that profile results in the following CLI
> arguments for javac:
>
> {code:none}
> [DEBUG] Command line options:
> [DEBUG] -d /home/runner/work/maven-repro/maven-repro/target/classes
> -classpath /home/runner/work/maven-repro/maven-repro/target/classes:
> -sourcepath
> /home/runner/work/maven-repro/maven-repro/src/main/java:/home/runner/work/maven-repro/maven-repro/target/generated-sources/annotations:
> -s
> /home/runner/work/maven-repro/maven-repro/target/generated-sources/annotations
> -g --release 17 -encoding UTF-8 -Xmaxerrs 100 100 -Xmaxwarns -Xmaxerrs 100
> -Xmaxwarns 100 -XDuseUnsharedTable=true{code}
>
>
> Since javac doesn't know what to do with "-Xmaxerrs 100 100", it fails to
> build.
>
> An example of such a profile would be the following:
> {code:xml}
> <profile>
> <id>test</id>
> <build>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-compiler-plugin</artifactId>
> <version>3.13.0</version>
> <configuration>
> <compilerArgs combine.children="append">
> <arg>-Xmaxerrs</arg>
> <arg>100</arg>
> <arg>-Xmaxwarns</arg>
> <arg>100</arg>
> </compilerArgs>
> </configuration>
> </plugin>
> </plugins>
> </build>
> </profile> {code}
> If a project like that is run with
> {code:none}
> mvn clean verify -Ptest {code}
> on Maven 4, this will result in the above CLI arguments and a build failure.
> Both the full pom.xml as well as the build output are included as attachments.
> A full reproducer using GitHub Actions can be found here:
> [https://github.com/danthe1st/maven-repro/tree/duplicate-compiler-arg]
> Build output:
> [https://github.com/danthe1st/maven-repro/actions/runs/11280962017/job/31375110882]
> Build output with Maven 3 (works):
> [https://github.com/danthe1st/maven-repro/actions/runs/11280962017/job/31375110610]
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)