This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch maven-4.0.x
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/maven-4.0.x by this push:
     new d8f02a06b8 Bugfix: fix CLI graceful death (#11239) (#11246)
d8f02a06b8 is described below

commit d8f02a06b833403c54ebaa1374534aeae79ea234
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Fri Oct 10 10:59:07 2025 +0200

    Bugfix: fix CLI graceful death (#11239) (#11246)
    
    When CLI contains unsupported parameters, the `context.options` may be 
null, that is violated by `populateUserProperties` method.
    
    Before (master):
    ```
    $ mvn --encrypt-master-password xxxxx
    [ERROR] Error executing Maven.
    [ERROR] Error parsing program arguments
    [ERROR] Caused by: Failed to parse CLI arguments: Unrecognized option: 
--encrypt-master-password
    [ERROR] Error populating user properties
    [ERROR] Caused by: Cannot invoke 
"org.apache.maven.api.cli.Options.userProperties()" because "context.options" 
is null
    [ERROR] Error reading core extensions descriptor
    [ERROR] Caused by: null
    $
    ```
    
    With PR:
    ```
    $ mvn --encrypt-master-password
    [ERROR] Error executing Maven.
    [ERROR] Error parsing program arguments
    [ERROR] Caused by: Failed to parse CLI arguments: Unrecognized option: 
--encrypt-master-password
    $
    ```
    
    Backport of 7baf2a8921923bb4782490e0adb5d4b0381ae4fc
---
 .../src/main/java/org/apache/maven/cling/invoker/BaseParser.java     | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git 
a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java 
b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java
index 20247749e2..4c9b6528ac 100644
--- 
a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java
+++ 
b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java
@@ -435,8 +435,9 @@ protected Map<String, String> 
populateUserProperties(LocalContext context) {
         // are most dominant.
         // 
----------------------------------------------------------------------
 
-        Map<String, String> userSpecifiedProperties =
-                new HashMap<>(context.options.userProperties().orElse(new 
HashMap<>()));
+        Map<String, String> userSpecifiedProperties = context.options != null
+                ? new HashMap<>(context.options.userProperties().orElse(new 
HashMap<>()))
+                : new HashMap<>();
         createInterpolator().interpolate(userSpecifiedProperties, paths::get);
 
         // 
----------------------------------------------------------------------

Reply via email to