[MNG-8446] Project cannot start due to too many warnings (#1993)

JIRA issue: [MNG-8446](https://issues.apache.org/jira/browse/MNG-8446)

This will help (but is not sufficient) to make [camel-quarkus](https://github.com/apache/camel-quarkus) buildable with maven 4.x.

---

https://issues.apache.org/jira/browse/MNG-8446
This commit is contained in:
Guillaume Nodet 2024-12-17 18:44:55 +01:00 committed by GitHub
parent a68b52fcba
commit 8a69678007
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 219 additions and 160 deletions

View File

@ -445,5 +445,13 @@ public final class Constants {
@Config(type = "java.time.Instant")
public static final String MAVEN_START_INSTANT = "maven.startInstant";
/**
* Max number of problems for each severity level retained by the model builder.
*
* @since 4.0.0
*/
@Config(type = "java.lang.Integer", defaultValue = "100")
public static final String MAVEN_BUILDER_MAX_PROBLEMS = "maven.builder.maxProblems";
private Constants() {}
}

View File

@ -205,6 +205,10 @@ public class DefaultModelBuilder implements ModelBuilder {
return new ModelBuilderSessionImpl();
}
static int getMaxProblems(Session session) {
return Integer.parseInt(session.getUserProperties().getOrDefault(Constants.MAVEN_BUILDER_MAX_PROBLEMS, "100"));
}
protected class ModelBuilderSessionImpl implements ModelBuilderSession {
ModelBuilderSessionState mainSession;
@ -223,7 +227,8 @@ public class DefaultModelBuilder implements ModelBuilder {
mainSession = new ModelBuilderSessionState(request);
session = mainSession;
} else {
session = mainSession.derive(request, new DefaultModelBuilderResult());
session =
mainSession.derive(request, new DefaultModelBuilderResult(getMaxProblems(mainSession.session)));
}
// Build the request
if (request.getRequestType() == ModelBuilderRequest.RequestType.BUILD_PROJECT) {
@ -259,7 +264,7 @@ public class DefaultModelBuilder implements ModelBuilder {
this(
request.getSession(),
request,
new DefaultModelBuilderResult(),
new DefaultModelBuilderResult(DefaultModelBuilder.getMaxProblems(request.getSession())),
request.getSession()
.getData()
.computeIfAbsent(SessionData.key(ModelCache.class), modelCacheFactory::newInstance),
@ -300,8 +305,12 @@ public class DefaultModelBuilder implements ModelBuilder {
this.result.setSource(this.request.getSource());
}
int getMaxProblems() {
return DefaultModelBuilder.getMaxProblems(session);
}
ModelBuilderSessionState derive(ModelSource source) {
return derive(source, new DefaultModelBuilderResult(result));
return derive(source, new DefaultModelBuilderResult(result, getMaxProblems()));
}
ModelBuilderSessionState derive(ModelSource source, DefaultModelBuilderResult result) {
@ -312,7 +321,7 @@ public class DefaultModelBuilder implements ModelBuilder {
* Creates a new session, sharing cached datas and propagating errors.
*/
ModelBuilderSessionState derive(ModelBuilderRequest request) {
return derive(request, new DefaultModelBuilderResult(result));
return derive(request, new DefaultModelBuilderResult(result, getMaxProblems()));
}
ModelBuilderSessionState derive(ModelBuilderRequest request, DefaultModelBuilderResult result) {
@ -711,7 +720,8 @@ public class DefaultModelBuilder implements ModelBuilder {
private void loadFromRoot(Path root, Path top) {
try (PhasingExecutor executor = createExecutor()) {
DefaultModelBuilderResult r = Objects.equals(top, root) ? result : new DefaultModelBuilderResult();
DefaultModelBuilderResult r =
Objects.equals(top, root) ? result : new DefaultModelBuilderResult(getMaxProblems());
loadFilePom(executor, top, root, Set.of(), r);
}
if (result.getFileModel() == null && !Objects.equals(top, root)) {
@ -783,8 +793,9 @@ public class DefaultModelBuilder implements ModelBuilder {
continue;
}
DefaultModelBuilderResult cr =
Objects.equals(top, subprojectFile) ? result : new DefaultModelBuilderResult(r);
DefaultModelBuilderResult cr = Objects.equals(top, subprojectFile)
? result
: new DefaultModelBuilderResult(r, getMaxProblems());
if (request.isRecursive()) {
r.getChildren().add(cr);
}

View File

@ -19,14 +19,18 @@
package org.apache.maven.internal.impl.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.maven.api.model.Model;
import org.apache.maven.api.model.Profile;
import org.apache.maven.api.services.BuilderProblem;
import org.apache.maven.api.services.ModelBuilderResult;
import org.apache.maven.api.services.ModelProblem;
import org.apache.maven.api.services.ModelSource;
@ -42,17 +46,21 @@ class DefaultModelBuilderResult implements ModelBuilderResult {
private Model effectiveModel;
private List<Profile> activePomProfiles;
private List<Profile> activeExternalProfiles;
private final List<ModelProblem> problems = new CopyOnWriteArrayList<>();
private final Queue<ModelProblem> problems = new ConcurrentLinkedQueue<>();
private final DefaultModelBuilderResult problemHolder;
private final List<DefaultModelBuilderResult> children = new ArrayList<>();
DefaultModelBuilderResult() {
this(null);
private int maxProblems;
private Map<BuilderProblem.Severity, AtomicInteger> problemCount = new ConcurrentHashMap<>();
DefaultModelBuilderResult(int maxProblems) {
this(null, maxProblems);
}
DefaultModelBuilderResult(DefaultModelBuilderResult problemHolder) {
DefaultModelBuilderResult(DefaultModelBuilderResult problemHolder, int maxProblems) {
this.problemHolder = problemHolder;
this.maxProblems = maxProblems;
}
public ModelSource getSource() {
@ -125,7 +133,21 @@ class DefaultModelBuilderResult implements ModelBuilderResult {
*/
@Override
public List<ModelProblem> getProblems() {
return Collections.unmodifiableList(problems);
List<ModelProblem> additionalProblems = new ArrayList<>();
problemCount.forEach((s, i) -> {
if (i.get() > maxProblems) {
additionalProblems.add(new DefaultModelProblem(
String.format("Too many problems %d of severity %s", i.get(), s.name()),
s,
ModelProblem.Version.BASE,
null,
-1,
-1,
null,
null));
}
});
return Stream.concat(problems.stream(), additionalProblems.stream()).toList();
}
/**
@ -134,7 +156,12 @@ class DefaultModelBuilderResult implements ModelBuilderResult {
* @param problem The problem to be added. It must be an instance of ModelProblem.
*/
public void addProblem(ModelProblem problem) {
problems.add(problem);
int problemCount = this.problemCount
.computeIfAbsent(problem.getSeverity(), s -> new AtomicInteger())
.incrementAndGet();
if (problemCount < maxProblems) {
problems.add(problem);
}
if (problemHolder != null) {
problemHolder.addProblem(problem);
}

View File

@ -16,266 +16,272 @@
# specific language governing permissions and limitations
# under the License.
#
props.count = 44
props.count = 45
props.1.key = maven.build.timestamp.format
props.1.configurationType = String
props.1.description = Build timestamp format.
props.1.defaultValue = yyyy-MM-dd'T'HH:mm:ssXXX
props.1.since = 3.0.0
props.1.configurationSource = Model properties
props.2.key = maven.consumer.pom
props.2.configurationType = Boolean
props.2.description = User property for enabling/disabling the consumer POM feature.
props.2.defaultValue = true
props.2.key = maven.builder.maxProblems
props.2.configurationType = Integer
props.2.description = Max number of problems for each severity level retained by the model builder.
props.2.defaultValue = 100
props.2.since = 4.0.0
props.2.configurationSource = User properties
props.3.key = maven.deploy.snapshot.buildNumber
props.3.configurationType = Integer
props.3.description = User property for overriding calculated "build number" for snapshot deploys. Caution: this property should be RARELY used (if used at all). It may help in special cases like "aligning" a reactor build subprojects build numbers to perform a "snapshot lock down". Value given here must be <code>maxRemoteBuildNumber + 1</code> or greater, otherwise build will fail. How the number to be obtained is left to user (ie by inspecting snapshot repository metadata or alike). Note: this feature is present in Maven 3.9.7 but with different key: <code>maven.buildNumber</code>. In Maven 4 as part of cleanup effort this key was renamed to properly reflect its purpose.
props.3.defaultValue =
props.3.key = maven.consumer.pom
props.3.configurationType = Boolean
props.3.description = User property for enabling/disabling the consumer POM feature.
props.3.defaultValue = true
props.3.since = 4.0.0
props.3.configurationSource = User properties
props.4.key = maven.ext.class.path
props.4.configurationType = String
props.4.description = Extensions class path.
props.4.key = maven.deploy.snapshot.buildNumber
props.4.configurationType = Integer
props.4.description = User property for overriding calculated "build number" for snapshot deploys. Caution: this property should be RARELY used (if used at all). It may help in special cases like "aligning" a reactor build subprojects build numbers to perform a "snapshot lock down". Value given here must be <code>maxRemoteBuildNumber + 1</code> or greater, otherwise build will fail. How the number to be obtained is left to user (ie by inspecting snapshot repository metadata or alike). Note: this feature is present in Maven 3.9.7 but with different key: <code>maven.buildNumber</code>. In Maven 4 as part of cleanup effort this key was renamed to properly reflect its purpose.
props.4.defaultValue =
props.4.since = 4.0.0
props.4.configurationSource = User properties
props.5.key = maven.home
props.5.key = maven.ext.class.path
props.5.configurationType = String
props.5.description = Maven home.
props.5.description = Extensions class path.
props.5.defaultValue =
props.5.since = 3.0.0
props.5.configurationSource = User properties
props.6.key = maven.installation.conf
props.6.key = maven.home
props.6.configurationType = String
props.6.description = Maven installation configuration directory.
props.6.defaultValue = ${maven.home}/conf
props.6.since = 4.0.0
props.6.description = Maven home.
props.6.defaultValue =
props.6.since = 3.0.0
props.6.configurationSource = User properties
props.7.key = maven.installation.extensions
props.7.key = maven.installation.conf
props.7.configurationType = String
props.7.description = Maven installation extensions.
props.7.defaultValue = ${maven.installation.conf}/extensions.xml
props.7.description = Maven installation configuration directory.
props.7.defaultValue = ${maven.home}/conf
props.7.since = 4.0.0
props.7.configurationSource = User properties
props.8.key = maven.installation.settings
props.8.key = maven.installation.extensions
props.8.configurationType = String
props.8.description = Maven installation settings.
props.8.defaultValue = ${maven.installation.conf}/settings.xml
props.8.description = Maven installation extensions.
props.8.defaultValue = ${maven.installation.conf}/extensions.xml
props.8.since = 4.0.0
props.8.configurationSource = User properties
props.9.key = maven.installation.toolchains
props.9.key = maven.installation.settings
props.9.configurationType = String
props.9.description = Maven installation toolchains.
props.9.defaultValue = ${maven.installation.conf}/toolchains.xml
props.9.description = Maven installation settings.
props.9.defaultValue = ${maven.installation.conf}/settings.xml
props.9.since = 4.0.0
props.9.configurationSource = User properties
props.10.key = maven.modelBuilder.parallelism
props.10.configurationType = Integer
props.10.description = ProjectBuilder parallelism.
props.10.defaultValue = cores/2 + 1
props.10.key = maven.installation.toolchains
props.10.configurationType = String
props.10.description = Maven installation toolchains.
props.10.defaultValue = ${maven.installation.conf}/toolchains.xml
props.10.since = 4.0.0
props.10.configurationSource = User properties
props.11.key = maven.plugin.validation
props.11.configurationType = String
props.11.description = Plugin validation level.
props.11.defaultValue = inline
props.11.since = 3.9.2
props.11.key = maven.modelBuilder.parallelism
props.11.configurationType = Integer
props.11.description = ProjectBuilder parallelism.
props.11.defaultValue = cores/2 + 1
props.11.since = 4.0.0
props.11.configurationSource = User properties
props.12.key = maven.plugin.validation.excludes
props.12.key = maven.plugin.validation
props.12.configurationType = String
props.12.description = Plugin validation exclusions.
props.12.defaultValue =
props.12.since = 3.9.6
props.12.description = Plugin validation level.
props.12.defaultValue = inline
props.12.since = 3.9.2
props.12.configurationSource = User properties
props.13.key = maven.project.conf
props.13.key = maven.plugin.validation.excludes
props.13.configurationType = String
props.13.description = Maven project configuration directory.
props.13.defaultValue = ${session.rootDirectory}/.mvn
props.13.since = 4.0.0
props.13.description = Plugin validation exclusions.
props.13.defaultValue =
props.13.since = 3.9.6
props.13.configurationSource = User properties
props.14.key = maven.project.extensions
props.14.key = maven.project.conf
props.14.configurationType = String
props.14.description = Maven project extensions.
props.14.defaultValue = ${maven.project.conf}/extensions.xml
props.14.description = Maven project configuration directory.
props.14.defaultValue = ${session.rootDirectory}/.mvn
props.14.since = 4.0.0
props.14.configurationSource = User properties
props.15.key = maven.project.settings
props.15.key = maven.project.extensions
props.15.configurationType = String
props.15.description = Maven project settings.
props.15.defaultValue = ${maven.project.conf}/settings.xml
props.15.description = Maven project extensions.
props.15.defaultValue = ${maven.project.conf}/extensions.xml
props.15.since = 4.0.0
props.15.configurationSource = User properties
props.16.key = maven.relocations.entries
props.16.key = maven.project.settings
props.16.configurationType = String
props.16.description = User controlled relocations. This property is a comma separated list of entries with the syntax <code>GAV&gt;GAV</code>. The first <code>GAV</code> can contain <code>\*</code> for any elem (so <code>\*:\*:\*</code> would mean ALL, something you don't want). The second <code>GAV</code> is either fully specified, or also can contain <code>\*</code>, then it behaves as "ordinary relocation": the coordinate is preserved from relocated artifact. Finally, if right hand <code>GAV</code> is absent (line looks like <code>GAV&gt;</code>), the left hand matching <code>GAV</code> is banned fully (from resolving). <br/> Note: the <code>&gt;</code> means project level, while <code>&gt;&gt;</code> means global (whole session level, so even plugins will get relocated artifacts) relocation. <br/> For example, <pre>maven.relocations.entries = org.foo:\*:\*>, \\<br/> org.here:\*:\*>org.there:\*:\*, \\<br/> javax.inject:javax.inject:1>>jakarta.inject:jakarta.inject:1.0.5</pre> means: 3 entries, ban <code>org.foo group</code> (exactly, so <code>org.foo.bar</code> is allowed), relocate <code>org.here</code> to <code>org.there</code> and finally globally relocate (see <code>&gt;&gt;</code> above) <code>javax.inject:javax.inject:1</code> to <code>jakarta.inject:jakarta.inject:1.0.5</code>.
props.16.defaultValue =
props.16.description = Maven project settings.
props.16.defaultValue = ${maven.project.conf}/settings.xml
props.16.since = 4.0.0
props.16.configurationSource = User properties
props.17.key = maven.repo.central
props.17.key = maven.relocations.entries
props.17.configurationType = String
props.17.description = Maven central repository URL. The property will have the value of the <code>MAVEN_REPO_CENTRAL</code> environment variable if it is defined.
props.17.defaultValue = https://repo.maven.apache.org/maven2
props.17.description = User controlled relocations. This property is a comma separated list of entries with the syntax <code>GAV&gt;GAV</code>. The first <code>GAV</code> can contain <code>\*</code> for any elem (so <code>\*:\*:\*</code> would mean ALL, something you don't want). The second <code>GAV</code> is either fully specified, or also can contain <code>\*</code>, then it behaves as "ordinary relocation": the coordinate is preserved from relocated artifact. Finally, if right hand <code>GAV</code> is absent (line looks like <code>GAV&gt;</code>), the left hand matching <code>GAV</code> is banned fully (from resolving). <br/> Note: the <code>&gt;</code> means project level, while <code>&gt;&gt;</code> means global (whole session level, so even plugins will get relocated artifacts) relocation. <br/> For example, <pre>maven.relocations.entries = org.foo:\*:\*>, \\<br/> org.here:\*:\*>org.there:\*:\*, \\<br/> javax.inject:javax.inject:1>>jakarta.inject:jakarta.inject:1.0.5</pre> means: 3 entries, ban <code>org.foo group</code> (exactly, so <code>org.foo.bar</code> is allowed), relocate <code>org.here</code> to <code>org.there</code> and finally globally relocate (see <code>&gt;&gt;</code> above) <code>javax.inject:javax.inject:1</code> to <code>jakarta.inject:jakarta.inject:1.0.5</code>.
props.17.defaultValue =
props.17.since = 4.0.0
props.17.configurationSource = User properties
props.18.key = maven.repo.local
props.18.key = maven.repo.central
props.18.configurationType = String
props.18.description = Maven local repository.
props.18.defaultValue = ${maven.user.conf}/repository
props.18.since = 3.0.0
props.18.description = Maven central repository URL. The property will have the value of the <code>MAVEN_REPO_CENTRAL</code> environment variable if it is defined.
props.18.defaultValue = https://repo.maven.apache.org/maven2
props.18.since = 4.0.0
props.18.configurationSource = User properties
props.19.key = maven.repo.local.head
props.19.key = maven.repo.local
props.19.configurationType = String
props.19.description = User property for chained LRM: the new "head" local repository to use, and "push" the existing into tail. Similar to <code>maven.repo.local.tail</code>, this property may contain comma separated list of paths to be used as local repositories (combine with chained local repository), but while latter is "appending" this one is "prepending".
props.19.defaultValue =
props.19.since = 4.0.0
props.19.description = Maven local repository.
props.19.defaultValue = ${maven.user.conf}/repository
props.19.since = 3.0.0
props.19.configurationSource = User properties
props.20.key = maven.repo.local.recordReverseTree
props.20.key = maven.repo.local.head
props.20.configurationType = String
props.20.description = User property for reverse dependency tree. If enabled, Maven will record ".tracking" directory into local repository with "reverse dependency tree", essentially explaining WHY given artifact is present in local repository. Default: <code>false</code>, will not record anything.
props.20.defaultValue = false
props.20.since = 3.9.0
props.20.description = User property for chained LRM: the new "head" local repository to use, and "push" the existing into tail. Similar to <code>maven.repo.local.tail</code>, this property may contain comma separated list of paths to be used as local repositories (combine with chained local repository), but while latter is "appending" this one is "prepending".
props.20.defaultValue =
props.20.since = 4.0.0
props.20.configurationSource = User properties
props.21.key = maven.repo.local.tail
props.21.key = maven.repo.local.recordReverseTree
props.21.configurationType = String
props.21.description = User property for chained LRM: list of "tail" local repository paths (separated by comma), to be used with <code>org.eclipse.aether.util.repository.ChainedLocalRepositoryManager</code>. Default value: <code>null</code>, no chained LRM is used.
props.21.defaultValue =
props.21.description = User property for reverse dependency tree. If enabled, Maven will record ".tracking" directory into local repository with "reverse dependency tree", essentially explaining WHY given artifact is present in local repository. Default: <code>false</code>, will not record anything.
props.21.defaultValue = false
props.21.since = 3.9.0
props.21.configurationSource = User properties
props.22.key = maven.repo.local.tail.ignoreAvailability
props.22.key = maven.repo.local.tail
props.22.configurationType = String
props.22.description = User property for chained LRM: whether to ignore "availability check" in tail or not. Usually you do want to ignore it. This property is mapped onto corresponding Resolver 2.x property, is like a synonym for it. Default value: <code>true</code>.
props.22.description = User property for chained LRM: list of "tail" local repository paths (separated by comma), to be used with <code>org.eclipse.aether.util.repository.ChainedLocalRepositoryManager</code>. Default value: <code>null</code>, no chained LRM is used.
props.22.defaultValue =
props.22.since = 3.9.0
props.22.configurationSource = User properties
props.23.key = maven.resolver.dependencyManagerTransitivity
props.23.key = maven.repo.local.tail.ignoreAvailability
props.23.configurationType = String
props.23.description = User property for selecting dependency manager behaviour regarding transitive dependencies and dependency management entries in their POMs. Maven 3 targeted full backward compatibility with Maven2, hence it ignored dependency management entries in transitive dependency POMs. Maven 4 enables "transitivity" by default, hence unlike Maven2, obeys dependency management entries deep in dependency graph as well. <br/> Default: <code>"true"</code>.
props.23.defaultValue = true
props.23.since = 4.0.0
props.23.description = User property for chained LRM: whether to ignore "availability check" in tail or not. Usually you do want to ignore it. This property is mapped onto corresponding Resolver 2.x property, is like a synonym for it. Default value: <code>true</code>.
props.23.defaultValue =
props.23.since = 3.9.0
props.23.configurationSource = User properties
props.24.key = maven.resolver.transport
props.24.key = maven.resolver.dependencyManagerTransitivity
props.24.configurationType = String
props.24.description = Resolver transport to use. Can be <code>default</code>, <code>wagon</code>, <code>apache</code>, <code>jdk</code> or <code>auto</code>.
props.24.defaultValue = default
props.24.description = User property for selecting dependency manager behaviour regarding transitive dependencies and dependency management entries in their POMs. Maven 3 targeted full backward compatibility with Maven2, hence it ignored dependency management entries in transitive dependency POMs. Maven 4 enables "transitivity" by default, hence unlike Maven2, obeys dependency management entries deep in dependency graph as well. <br/> Default: <code>"true"</code>.
props.24.defaultValue = true
props.24.since = 4.0.0
props.24.configurationSource = User properties
props.25.key = maven.session.versionFilter
props.25.key = maven.resolver.transport
props.25.configurationType = String
props.25.description = User property for version filter expression used in session, applied to resolving ranges: a semicolon separated list of filters to apply. By default, no version filter is applied (like in Maven 3). <br/> Supported filters: <ul> <li>"h" or "h(num)" - highest version or top list of highest ones filter</li> <li>"l" or "l(num)" - lowest version or bottom list of lowest ones filter</li> <li>"s" - contextual snapshot filter</li> <li>"e(G:A:V)" - predicate filter (leaves out G:A:V from range, if hit, V can be range)</li> </ul> Example filter expression: <code>"h(5);s;e(org.foo:bar:1)</code> will cause: ranges are filtered for "top 5" (instead full range), snapshots are banned if root project is not a snapshot, and if range for <code>org.foo:bar</code> is being processed, version 1 is omitted. Value in this property builds <code>org.eclipse.aether.collection.VersionFilter</code> instance.
props.25.defaultValue =
props.25.description = Resolver transport to use. Can be <code>default</code>, <code>wagon</code>, <code>apache</code>, <code>jdk</code> or <code>auto</code>.
props.25.defaultValue = default
props.25.since = 4.0.0
props.25.configurationSource = User properties
props.26.key = maven.settings.security
props.26.key = maven.session.versionFilter
props.26.configurationType = String
props.26.description =
props.26.defaultValue = ${maven.user.conf}/settings-security4.xml
props.26.description = User property for version filter expression used in session, applied to resolving ranges: a semicolon separated list of filters to apply. By default, no version filter is applied (like in Maven 3). <br/> Supported filters: <ul> <li>"h" or "h(num)" - highest version or top list of highest ones filter</li> <li>"l" or "l(num)" - lowest version or bottom list of lowest ones filter</li> <li>"s" - contextual snapshot filter</li> <li>"e(G:A:V)" - predicate filter (leaves out G:A:V from range, if hit, V can be range)</li> </ul> Example filter expression: <code>"h(5);s;e(org.foo:bar:1)</code> will cause: ranges are filtered for "top 5" (instead full range), snapshots are banned if root project is not a snapshot, and if range for <code>org.foo:bar</code> is being processed, version 1 is omitted. Value in this property builds <code>org.eclipse.aether.collection.VersionFilter</code> instance.
props.26.defaultValue =
props.26.since = 4.0.0
props.26.configurationSource = User properties
props.27.key = maven.startInstant
props.27.configurationType = java.time.Instant
props.27.description = User property used to store the build timestamp.
props.27.defaultValue =
props.27.since = 4.0.0
props.27.key = maven.settings.security
props.27.configurationType = String
props.27.description =
props.27.defaultValue = ${maven.user.conf}/settings-security4.xml
props.27.configurationSource = User properties
props.28.key = maven.style.color
props.28.configurationType = String
props.28.description = Maven output color mode. Allowed values are <code>auto</code>, <code>always</code>, <code>never</code>.
props.28.defaultValue = auto
props.28.key = maven.startInstant
props.28.configurationType = java.time.Instant
props.28.description = User property used to store the build timestamp.
props.28.defaultValue =
props.28.since = 4.0.0
props.28.configurationSource = User properties
props.29.key = maven.style.debug
props.29.key = maven.style.color
props.29.configurationType = String
props.29.description = Color style for debug messages.
props.29.defaultValue = bold,f:cyan
props.29.description = Maven output color mode. Allowed values are <code>auto</code>, <code>always</code>, <code>never</code>.
props.29.defaultValue = auto
props.29.since = 4.0.0
props.29.configurationSource = User properties
props.30.key = maven.style.error
props.30.key = maven.style.debug
props.30.configurationType = String
props.30.description = Color style for error messages.
props.30.defaultValue = bold,f:red
props.30.description = Color style for debug messages.
props.30.defaultValue = bold,f:cyan
props.30.since = 4.0.0
props.30.configurationSource = User properties
props.31.key = maven.style.failure
props.31.key = maven.style.error
props.31.configurationType = String
props.31.description = Color style for failure messages.
props.31.description = Color style for error messages.
props.31.defaultValue = bold,f:red
props.31.since = 4.0.0
props.31.configurationSource = User properties
props.32.key = maven.style.info
props.32.key = maven.style.failure
props.32.configurationType = String
props.32.description = Color style for info messages.
props.32.defaultValue = bold,f:blue
props.32.description = Color style for failure messages.
props.32.defaultValue = bold,f:red
props.32.since = 4.0.0
props.32.configurationSource = User properties
props.33.key = maven.style.mojo
props.33.key = maven.style.info
props.33.configurationType = String
props.33.description = Color style for mojo messages.
props.33.defaultValue = f:green
props.33.description = Color style for info messages.
props.33.defaultValue = bold,f:blue
props.33.since = 4.0.0
props.33.configurationSource = User properties
props.34.key = maven.style.project
props.34.key = maven.style.mojo
props.34.configurationType = String
props.34.description = Color style for project messages.
props.34.defaultValue = f:cyan
props.34.description = Color style for mojo messages.
props.34.defaultValue = f:green
props.34.since = 4.0.0
props.34.configurationSource = User properties
props.35.key = maven.style.strong
props.35.key = maven.style.project
props.35.configurationType = String
props.35.description = Color style for strong messages.
props.35.defaultValue = bold
props.35.description = Color style for project messages.
props.35.defaultValue = f:cyan
props.35.since = 4.0.0
props.35.configurationSource = User properties
props.36.key = maven.style.success
props.36.key = maven.style.strong
props.36.configurationType = String
props.36.description = Color style for success messages.
props.36.defaultValue = bold,f:green
props.36.description = Color style for strong messages.
props.36.defaultValue = bold
props.36.since = 4.0.0
props.36.configurationSource = User properties
props.37.key = maven.style.trace
props.37.key = maven.style.success
props.37.configurationType = String
props.37.description = Color style for trace messages.
props.37.defaultValue = bold,f:magenta
props.37.description = Color style for success messages.
props.37.defaultValue = bold,f:green
props.37.since = 4.0.0
props.37.configurationSource = User properties
props.38.key = maven.style.transfer
props.38.key = maven.style.trace
props.38.configurationType = String
props.38.description = Color style for transfer messages.
props.38.defaultValue = f:bright-black
props.38.description = Color style for trace messages.
props.38.defaultValue = bold,f:magenta
props.38.since = 4.0.0
props.38.configurationSource = User properties
props.39.key = maven.style.warning
props.39.key = maven.style.transfer
props.39.configurationType = String
props.39.description = Color style for warning messages.
props.39.defaultValue = bold,f:yellow
props.39.description = Color style for transfer messages.
props.39.defaultValue = f:bright-black
props.39.since = 4.0.0
props.39.configurationSource = User properties
props.40.key = maven.user.conf
props.40.key = maven.style.warning
props.40.configurationType = String
props.40.description = Maven user configuration directory.
props.40.defaultValue = ${user.home}/.m2
props.40.description = Color style for warning messages.
props.40.defaultValue = bold,f:yellow
props.40.since = 4.0.0
props.40.configurationSource = User properties
props.41.key = maven.user.extensions
props.41.key = maven.user.conf
props.41.configurationType = String
props.41.description = Maven user extensions.
props.41.defaultValue = ${maven.user.conf}/extensions.xml
props.41.description = Maven user configuration directory.
props.41.defaultValue = ${user.home}/.m2
props.41.since = 4.0.0
props.41.configurationSource = User properties
props.42.key = maven.user.settings
props.42.key = maven.user.extensions
props.42.configurationType = String
props.42.description = Maven user settings.
props.42.defaultValue = ${maven.user.conf}/settings.xml
props.42.description = Maven user extensions.
props.42.defaultValue = ${maven.user.conf}/extensions.xml
props.42.since = 4.0.0
props.42.configurationSource = User properties
props.43.key = maven.user.toolchains
props.43.key = maven.user.settings
props.43.configurationType = String
props.43.description = Maven user toolchains.
props.43.defaultValue = ${maven.user.conf}/toolchains.xml
props.43.description = Maven user settings.
props.43.defaultValue = ${maven.user.conf}/settings.xml
props.43.since = 4.0.0
props.43.configurationSource = User properties
props.44.key = maven.versionResolver.noCache
props.44.configurationType = Boolean
props.44.description = User property for disabling version resolver cache.
props.44.defaultValue = false
props.44.since = 3.0.0
props.44.key = maven.user.toolchains
props.44.configurationType = String
props.44.description = Maven user toolchains.
props.44.defaultValue = ${maven.user.conf}/toolchains.xml
props.44.since = 4.0.0
props.44.configurationSource = User properties
props.45.key = maven.versionResolver.noCache
props.45.configurationType = Boolean
props.45.description = User property for disabling version resolver cache.
props.45.defaultValue = false
props.45.since = 3.0.0
props.45.configurationSource = User properties

View File

@ -23,6 +23,12 @@ props:
defaultValue: yyyy-MM-dd'T'HH:mm:ssXXX
since: 3.0.0
configurationSource: Model properties
- key: maven.builder.maxProblems
configurationType: Integer
description: "Max number of problems for each severity level retained by the model builder."
defaultValue: 100
since: 4.0.0
configurationSource: User properties
- key: maven.consumer.pom
configurationType: Boolean
description: "User property for enabling/disabling the consumer POM feature."

View File

@ -26,6 +26,7 @@ under the License.
| Key | Type | Description | Default Value | Since | Source |
| --- | --- | --- | --- | --- | --- |
| `maven.build.timestamp.format` | `String` | Build timestamp format. | `yyyy-MM-dd'T'HH:mm:ssXXX` | 3.0.0 | Model properties |
| `maven.builder.maxProblems` | `Integer` | Max number of problems for each severity level retained by the model builder. | `100` | 4.0.0 | User properties |
| `maven.consumer.pom` | `Boolean` | User property for enabling/disabling the consumer POM feature. | `true` | 4.0.0 | User properties |
| `maven.deploy.snapshot.buildNumber` | `Integer` | User property for overriding calculated "build number" for snapshot deploys. Caution: this property should be RARELY used (if used at all). It may help in special cases like "aligning" a reactor build subprojects build numbers to perform a "snapshot lock down". Value given here must be <code>maxRemoteBuildNumber + 1</code> or greater, otherwise build will fail. How the number to be obtained is left to user (ie by inspecting snapshot repository metadata or alike). Note: this feature is present in Maven 3.9.7 but with different key: <code>maven.buildNumber</code>. In Maven 4 as part of cleanup effort this key was renamed to properly reflect its purpose. | - | 4.0.0 | User properties |
| `maven.ext.class.path` | `String` | Extensions class path. | - | | User properties |