From 5df44ee7060f609b4de270a9549749b81be0f52f Mon Sep 17 00:00:00 2001 From: Harsha Date: Mon, 21 Sep 2026 23:52:46 +0530 Subject: [PATCH 1/2] MNG-8725: Support max thread configuration --- .../src/main/java/org/apache/maven/cli/CLIManager.java | 3 ++- .../src/main/java/org/apache/maven/cli/MavenCli.java | 5 ++++- .../src/test/java/org/apache/maven/cli/MavenCliTest.java | 3 +++ .../java/org/apache/maven/cling/invoker/LookupInvoker.java | 5 ++++- .../maven/cling/invoker/mvn/CommonsCliMavenOptions.java | 3 ++- 5 files changed, 15 insertions(+), 4 deletions(-) diff --git a/compat/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/compat/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java index e4301d43e0fd..90e2ded4c214 100644 --- a/compat/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java +++ b/compat/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java @@ -307,7 +307,8 @@ public CLIManager() { options.addOption(Option.builder(THREADS) .longOpt("threads") .hasArg() - .desc("Thread count, for instance 4 (int) or 2C/2.5C (int/float) where C is core multiplied") + .desc( + "Thread count, for instance 4 (int) or 2C/2.5C (int/float) where C is core multiplied, or 'max' (available processors minus 1, minimum 1)") .build()); options.addOption(Option.builder(BUILDER) .longOpt("builder") diff --git a/compat/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/compat/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java index ebcb335ac074..866c5c1ec2f1 100644 --- a/compat/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java +++ b/compat/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java @@ -1624,6 +1624,9 @@ private void enableOnPresentOption( } int calculateDegreeOfConcurrency(String threadConfiguration) { + if ("max".equalsIgnoreCase(threadConfiguration)) { + return Math.max(1, Runtime.getRuntime().availableProcessors() - 1); + } try { if (threadConfiguration.endsWith("C")) { String str = threadConfiguration.substring(0, threadConfiguration.length() - 1); @@ -1647,7 +1650,7 @@ int calculateDegreeOfConcurrency(String threadConfiguration) { } } catch (NumberFormatException e) { throw new IllegalArgumentException("Invalid threads value: '" + threadConfiguration - + "'. Supported are int and float values ending with C."); + + "'. Supported are 'max', int and float values ending with C."); } } diff --git a/compat/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/compat/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java index 41a08285280d..15d02e416f03 100644 --- a/compat/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java +++ b/compat/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java @@ -183,6 +183,9 @@ void testCalculateDegreeOfConcurrency() { int cpus = Runtime.getRuntime().availableProcessors(); assertEquals((int) (cpus * 2.2), cli.calculateDegreeOfConcurrency("2.2C")); assertEquals(1, cli.calculateDegreeOfConcurrency("0.0001C")); + assertEquals(Math.max(1, cpus - 1), cli.calculateDegreeOfConcurrency("max")); + assertEquals(Math.max(1, cpus - 1), cli.calculateDegreeOfConcurrency("MAX")); + assertEquals(Math.max(1, cpus - 1), cli.calculateDegreeOfConcurrency("Max")); assertThrows(IllegalArgumentException.class, () -> cli.calculateDegreeOfConcurrency("-2.2C")); assertThrows(IllegalArgumentException.class, () -> cli.calculateDegreeOfConcurrency("0C")); } diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java index 3e027ef4bbf2..a89b08e5ab75 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/LookupInvoker.java @@ -936,6 +936,9 @@ protected void populateRequestFromSettings(MavenExecutionRequest request, Settin } protected int calculateDegreeOfConcurrency(String threadConfiguration) { + if ("max".equalsIgnoreCase(threadConfiguration)) { + return Math.max(1, Runtime.getRuntime().availableProcessors() - 1); + } try { if (threadConfiguration.endsWith("C")) { String str = threadConfiguration.substring(0, threadConfiguration.length() - 1); @@ -959,7 +962,7 @@ protected int calculateDegreeOfConcurrency(String threadConfiguration) { } } catch (NumberFormatException e) { throw new IllegalArgumentException("Invalid threads value: '" + threadConfiguration - + "'. Supported are int and float values ending with C."); + + "'. Supported are 'max', int and float values ending with C."); } } diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java index 233e22f15e76..bdc6e1d3e5c8 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java @@ -327,7 +327,8 @@ protected void prepareOptions(org.apache.commons.cli.Options options) { options.addOption(Option.builder(THREADS) .longOpt("threads") .hasArg() - .desc("Thread count, for instance 4 (int) or 2C/2.5C (int/float) where C is core multiplied") + .desc( + "Thread count, for instance 4 (int) or 2C/2.5C (int/float) where C is core multiplied, or 'max' (available processors minus 1, minimum 1)") .get()); options.addOption(Option.builder(BUILDER) .longOpt("builder") From c2d97344386ce4b4314b613aa8bd018f45d58cfc Mon Sep 17 00:00:00 2001 From: Harsha Date: Thu, 24 Sep 2026 23:14:26 +0530 Subject: [PATCH 2/2] MNG-8752: Clarify provided dependency transitivity --- .../org/apache/maven/api/DependencyScope.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java index f9f788e00316..cc58dd19c9aa 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java @@ -73,6 +73,21 @@ public enum DependencyScope { /** * Provided. + *

+ * A dependency required for compilation and testing that is expected to be provided at runtime + * by the JDK or the runtime environment/container. + *

+ * Transitivity and classpath behavior: + *

*/ PROVIDED("provided", false),