diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
index 49bf9db1ed..45e322fcb3 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
@@ -24,7 +24,7 @@ import java.io.PrintWriter;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.GnuParser;
+import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
@@ -123,7 +123,7 @@ public class CLIManager
options = new Options();
options.addOption( Option.builder( Character.toString( HELP ) ).longOpt( "help" ).desc( "Display help information" ).build() );
options.addOption( Option.builder( Character.toString( ALTERNATE_POM_FILE ) ).longOpt( "file" ).hasArg().desc( "Force the use of an alternate POM file (or directory with pom.xml)" ).build() );
- options.addOption( Option.builder( Character.toString( SET_SYSTEM_PROPERTY ) ).hasArg().desc( "Define a system property" ).build() );
+ options.addOption( Option.builder( Character.toString( SET_SYSTEM_PROPERTY ) ).numberOfArgs( 2 ).valueSeparator( '=' ).desc( "Define a system property" ).build() );
options.addOption( Option.builder( Character.toString( OFFLINE ) ).longOpt( "offline" ).desc( "Work offline" ).build() );
options.addOption( Option.builder( Character.toString( VERSION ) ).longOpt( "version" ).desc( "Display version information" ).build() );
options.addOption( Option.builder( Character.toString( QUIET ) ).longOpt( "quiet" ).desc( "Quiet output - only show errors" ).build() );
@@ -169,7 +169,7 @@ public class CLIManager
// We need to eat any quotes surrounding arguments...
String[] cleanArgs = CleanArgument.cleanArgs( args );
- CommandLineParser parser = new GnuParser();
+ CommandLineParser parser = new DefaultParser();
return parser.parse( options, cleanArgs );
}
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index 89f3833526..ffb9ea8301 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -1718,18 +1718,11 @@ public class MavenCli
// are most dominant.
// ----------------------------------------------------------------------
- if ( commandLine.hasOption( CLIManager.SET_SYSTEM_PROPERTY ) )
- {
- String[] defStrs = commandLine.getOptionValues( CLIManager.SET_SYSTEM_PROPERTY );
-
- if ( defStrs != null )
- {
- for ( String defStr : defStrs )
- {
- setCliProperty( defStr, userProperties );
- }
- }
- }
+ final Properties userSpecifiedProperties = commandLine.getOptionProperties(
+ String.valueOf( CLIManager.SET_SYSTEM_PROPERTY ) );
+ userSpecifiedProperties.forEach(
+ ( prop, value ) -> setCliProperty( (String) prop, (String) value, userProperties )
+ );
SystemProperties.addSystemProperties( systemProperties );
@@ -1747,27 +1740,8 @@ public class MavenCli
systemProperties.setProperty( "maven.build.version", mavenBuildVersion );
}
- private static void setCliProperty( String property, Properties properties )
+ private static void setCliProperty( String name, String value, Properties properties )
{
- String name;
-
- String value;
-
- int i = property.indexOf( '=' );
-
- if ( i <= 0 )
- {
- name = property.trim();
-
- value = "true";
- }
- else
- {
- name = property.substring( 0, i ).trim();
-
- value = property.substring( i + 1 );
- }
-
properties.setProperty( name, value );
// ----------------------------------------------------------------------
diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java
deleted file mode 100644
index 68e4c22e82..0000000000
--- a/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.apache.maven.cli;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import org.apache.commons.cli.CommandLine;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-public class CLIManagerTest
-{
- private CLIManager cliManager;
-
- @BeforeEach
- public void setup()
- {
- cliManager = new CLIManager();
- }
-
- @Test
- public void spacedOptions()
- throws Exception
- {
- CommandLine cmdLine = cliManager.parse( "-X -Dx=1 -D y=2 test".split( " " ) );
- assertTrue( cmdLine.hasOption( CLIManager.VERBOSE ) );
- assertThat( cmdLine.getOptionValues( CLIManager.SET_SYSTEM_PROPERTY )[0], is( "x=1" ) );
- assertThat( cmdLine.getOptionValues( CLIManager.SET_SYSTEM_PROPERTY )[1], is( "y=2" ) );
- }
-
-}
diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
index 4191e8880a..3d7e385dc6 100644
--- a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
+++ b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
@@ -45,11 +45,11 @@ import java.util.Collections;
import java.util.List;
import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.GnuParser;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
-import org.apache.commons.cli.Parser;
import org.apache.maven.Maven;
import org.apache.maven.eventspy.internal.EventSpyDispatcher;
import org.apache.maven.execution.MavenExecutionRequest;
@@ -96,7 +96,7 @@ public class MavenCliTest
@Test
public void testPerformProfileActivation() throws ParseException
{
- final Parser parser = new GnuParser();
+ final CommandLineParser parser = new DefaultParser();
final Options options = new Options();
options.addOption( Option.builder( Character.toString( CLIManager.ACTIVATE_PROFILES ) ).hasArg().build() );
@@ -122,7 +122,7 @@ public class MavenCliTest
@Test
public void testDetermineProjectActivation() throws ParseException
{
- final Parser parser = new GnuParser();
+ final CommandLineParser parser = new DefaultParser();
final Options options = new Options();
options.addOption( Option.builder( CLIManager.PROJECT_LIST ).hasArg().build() );
@@ -492,6 +492,77 @@ public class MavenCliTest
assertEquals( MessageUtils.stripAnsiCodes( versionOut ), versionOut );
}
+ @Test
+ public void populatePropertiesCanContainEqualsSign() throws Exception
+ {
+ // Arrange
+ CliRequest request = new CliRequest( new String[] { "-Dw=x=y", "validate" }, null );
+
+ // Act
+ cli.cli( request );
+ cli.properties( request );
+
+ // Assert
+ assertThat( request.getUserProperties().getProperty( "w" ), is( "x=y" ) );
+ }
+
+ @Test
+ public void populatePropertiesSpace() throws Exception
+ {
+ // Arrange
+ CliRequest request = new CliRequest( new String[] { "-D", "z=2", "validate" }, null );
+
+ // Act
+ cli.cli( request );
+ cli.properties( request );
+
+ // Assert
+ assertThat( request.getUserProperties().getProperty( "z" ), is( "2" ) );
+ }
+
+ @Test
+ public void populatePropertiesShorthand() throws Exception
+ {
+ // Arrange
+ CliRequest request = new CliRequest( new String[] { "-Dx", "validate" }, null );
+
+ // Act
+ cli.cli( request );
+ cli.properties( request );
+
+ // Assert
+ assertThat( request.getUserProperties().getProperty( "x" ), is( "true" ) );
+ }
+
+ @Test
+ public void populatePropertiesMultiple() throws Exception
+ {
+ // Arrange
+ CliRequest request = new CliRequest( new String[] { "-Dx=1", "-Dy", "validate" }, null );
+
+ // Act
+ cli.cli( request );
+ cli.properties( request );
+
+ // Assert
+ assertThat( request.getUserProperties().getProperty( "x" ), is( "1" ) );
+ assertThat( request.getUserProperties().getProperty( "y" ), is( "true" ) );
+ }
+
+ @Test
+ public void populatePropertiesOverwrite() throws Exception
+ {
+ // Arrange
+ CliRequest request = new CliRequest( new String[] { "-Dx", "-Dx=false", "validate" }, null );
+
+ // Act
+ cli.cli( request );
+ cli.properties( request );
+
+ // Assert
+ assertThat( request.getUserProperties().getProperty( "x" ), is( "false" ) );
+ }
+
private MavenProject createMavenProject( String groupId, String artifactId )
{
MavenProject project = new MavenProject();
diff --git a/pom.xml b/pom.xml
index 5d8b410457..194fce85e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,7 @@ under the License.
1.8
1.8
2.6.0
- 1.4
+ 1.5.0
3.12.0
5.8.1
3.2.0