"` | `Float` | The priority to use for a certain extension class. <class> can either be the fully qualified name or the simple name of a class. If the class name ends with Factory that suffix could optionally be left out. This configuration is used by org.eclipse.aether.internal.impl.PrioritizedComponents internal utility to sort classes by priority. This is reusable utility (so an extension can make use of it), but by default in "vanilla" Resolver following classes are sorted: -
org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory -
org.eclipse.aether.spi.connector.RepositoryConnectorFactory -
org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory -
org.eclipse.aether.spi.connector.transport.TransporterFactory -
org.eclipse.aether.spi.artifact.decorator.ArtifactDecoratorFactory -
org.eclipse.aether.spi.artifact.generator.ArtifactGeneratorFactory -
org.eclipse.aether.impl.MetadataGeneratorFactory
| - | | No | Session Configuration |
-| `"aether.priority.cached"` | `Boolean` | A flag indicating whether the created ordered components should be cached in session. | `true` | 2.0.0 | No | Session Configuration |
-| `"aether.priority.implicit"` | `Boolean` | A flag indicating whether the priorities of pluggable extensions are implicitly given by their iteration order such that the first extension has the highest priority. If set, an extension's built-in priority as well as any corresponding aether.priority.* configuration properties are ignored when searching for a suitable implementation among the available extensions. This priority mode is meant for cases where the application will present/inject extensions in the desired search order. | `false` | | No | Session Configuration |
-| `"aether.remoteRepositoryFilter.groupId"` | `Boolean` | Configuration to enable the GroupId filter (enabled by default). Can be fine-tuned per repository using repository ID suffixes. Important: For this filter to take effect, you must provide configuration files. Without configuration files, the enabled filter remains dormant and does not interfere with resolution. Configuration Files: - Location: Directory specified by
#CONFIG_PROP_BASEDIR (defaults to $LOCAL_REPO/.remoteRepositoryFilters ) - Naming:
groupId-$(repository.id).txt - Content: One groupId per line to allow/block from the repository
Recommended Setup (Per-Project): Use project-specific configuration to avoid repository ID clashes. Add to .mvn/maven.config : -Daether.remoteRepositoryFilter.groupId=true -Daether.remoteRepositoryFilter.groupId.basedir=${session.rootDirectory}/.mvn/rrf/ Then create groupId-myrepoId.txt files in the .mvn/rrf/ directory and commit them to version control. | `true` | 1.9.0 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.groupId.basedir"` | `String` | The basedir where to store filter files. If path is relative, it is resolved from local repository root. | `".remoteRepositoryFilters"` | 1.9.0 | No | Session Configuration |
-| `"aether.remoteRepositoryFilter.groupId.noInputOutcome"` | `Boolean` | Determines what happens when the filter is enabled, but has no groupId file available for given remote repository to work with. When set to true (default), the filter allows all requests to proceed for given remote repository when no groupId file is available. When set to false , the filter blocks all requests toward given remote repository when no groupId file is available. This setting allows repoId suffix, hence, can determine "global" or "repository targeted" behaviors. | `true` | 2.0.14 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.groupId.record"` | `Boolean` | Should filter go into "record" mode (and collect encountered artifacts)? | `false` | 1.9.0 | No | Session Configuration |
-| `"aether.remoteRepositoryFilter.groupId.skipped"` | `Boolean` | Configuration to skip the GroupId filter for given request. This configuration is evaluated and if true the GroupId remote filter will not kick in. | `false` | 2.0.14 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.prefixes"` | `Boolean` | Configuration to enable the Prefixes filter (enabled by default). Can be fine-tuned per repository using repository ID suffixes. Important: For this filter to take effect, configuration files must be available. Without configuration files, the enabled filter remains dormant and does not interfere with resolution. Configuration File Resolution: - User-provided files: Checked first from directory specified by
#CONFIG_PROP_BASEDIR (defaults to $LOCAL_REPO/.remoteRepositoryFilters ) - Auto-discovery: If not found, attempts to download from remote repository and cache locally
File Naming: prefixes-$(repository.id).txt Recommended Setup (Auto-Discovery with Override Capability): Start with auto-discovery, but prepare for project-specific overrides. Add to .mvn/maven.config : -Daether.remoteRepositoryFilter.prefixes=true -Daether.remoteRepositoryFilter.prefixes.basedir=${session.rootDirectory}/.mvn/rrf/ Initial setup: Don't provide any files - rely on auto-discovery as repositories are accessed. Override when needed: Create prefixes-myrepoId.txt files in .mvn/rrf/ and commit to version control. Caching: Auto-discovered prefix files are cached in the local repository. | `true` | 1.9.0 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.prefixes.basedir"` | `String` | The basedir where to store filter files. If path is relative, it is resolved from local repository root. | `".remoteRepositoryFilters"` | 1.9.0 | No | Session Configuration |
-| `"aether.remoteRepositoryFilter.prefixes.noInputOutcome"` | `Boolean` | Determines what happens when the filter is enabled, but has no prefixes available for given remote repository to work with. When set to true (default), the filter allows all requests to proceed for given remote repository when no prefixes are available. When set to false , the filter blocks all requests toward given remote repository when no prefixes are available. This setting allows repoId suffix, hence, can determine "global" or "repository targeted" behaviors. | `true` | 2.0.14 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.prefixes.resolvePrefixFiles"` | `Boolean` | Configuration to allow Prefixes file resolution attempt from remote repository as "auto discovery". If this configuration set to false only user-provided prefixes will be used. | `true` | 2.0.14 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.prefixes.skipped"` | `Boolean` | Configuration to skip the Prefixes filter for given request. This configuration is evaluated and if true the prefixes remote filter will not kick in. Main use case is by filter itself, to prevent recursion during discovery of remote prefixes file, but this also allows other components to control prefix filter discovery, while leaving configuration like #CONFIG_PROP_ENABLED still show the "real state". | `false` | 2.0.14 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.prefixes.useMirroredRepositories"` | `Boolean` | Configuration to allow Prefixes filter to auto-discover prefixes from mirrored repositories as well. For this to work Maven should be aware that given remote repository is mirror and is usually backed by MRM. Given multiple MRM implementations messes up prefixes file, is better to just skip these. In other case, one may use #CONFIG_PROP_ENABLED with repository ID suffix. | `false` | 2.0.14 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.prefixes.useRepositoryManagers"` | `Boolean` | Configuration to allow Prefixes filter to auto-discover prefixes from repository managers as well. For this to work Maven should be aware that given remote repository is backed by repository manager. Given multiple MRM implementations messes up prefixes file, is better to just skip these. In other case, one may use #CONFIG_PROP_ENABLED with repository ID suffix. Note: as of today, nothing sets this on remote repositories, but is added for future. | `false` | 2.0.14 | Yes | Session Configuration |
-| `"aether.remoteRepositoryFilter.repositoryKeyFunction"` | `String` | Experimental: Configuration for "repository key" function. Note: repository key functions other than "nid" produce repository keys will be way different that those produced with previous versions or without this option enabled. Filter uses this key function to lay down and look up files to use in filtering. | `"nid"` | 2.0.14 | No | Session Configuration |
-| `"aether.snapshotFilter"` | `Boolean` | The key in the repository session's RepositorySystemSession#getConfigProperties() configurationproperties used to store a Boolean flag whether this filter should be forced to ban snapshots. By default, snapshots are only filtered if the root artifact is not a snapshot. | `false` | | No | Session Configuration |
-| `"aether.syncContext.named.basedir.locksDir"` | `String` | The location of the directory toi use for locks. If relative path, it is resolved from the local repository root. | `".locks"` | 1.9.0 | No | Session Configuration |
-| `"aether.syncContext.named.discriminating.discriminator"` | `String` | Configuration property to pass in discriminator, if needed. If not present, it is auto-calculated. | - | 1.7.0 | No | Session Configuration |
-| `"aether.syncContext.named.discriminating.hostname"` | `String` | Configuration property to pass in hostname, if needed. If not present, hostname as reported by system will be used. | - | 1.7.0 | No | Session Configuration |
-| `"aether.syncContext.named.factory"` | `String` | Name of the lock factory to use in session. Out of the box supported ones are "file-lock", "rwlock-local", "semaphore-local", "noop". By adding extensions one can extend available lock factories (for example IPC locking). | `"file-lock"` | 1.9.1 | No | Session Configuration |
-| `"aether.syncContext.named.hashing.depth"` | `Integer` | The depth how many levels should adapter create. Acceptable values are 0-4 (inclusive). | `2` | 1.9.0 | No | Session Configuration |
-| `"aether.syncContext.named.nameMapper"` | `String` | Name of the name mapper to use in session. Out of the box supported ones are "static", "gav", "gaecv", "file-gav", "file-gaecv", "file-hgav", "file-hgaecv", "file-static" and "discriminating". | `"file-gaecv"` | 1.9.1 | No | Session Configuration |
-| `"aether.syncContext.named.redisson.address"` | `String` | Address of the Redis instance. Optional. | `"redis://localhost:6379"` | 2.0.0 | No | Java System Properties |
-| `"aether.syncContext.named.redisson.configFile"` | `String` | Path to a Redisson configuration file in YAML format. Read official documentation for details. | - | 1.7.0 | No | Java System Properties |
-| `"aether.syncContext.named.retry"` | `Integer` | The amount of retries on time-out. | `1` | 1.7.0 | No | Session Configuration |
-| `"aether.syncContext.named.retry.wait"` | `Long` | The amount of milliseconds to wait between retries on time-out. | `200l` | 1.7.0 | No | Session Configuration |
-| `"aether.syncContext.named.time"` | `Long` | The maximum of time amount to be blocked to obtain lock. | `900l` | 1.7.0 | No | Session Configuration |
-| `"aether.syncContext.named.time.unit"` | `String` | The unit of maximum time amount to be blocked to obtain lock. Use TimeUnit enum names. | `"SECONDS"` | 1.7.0 | No | Session Configuration |
-| `"aether.system.dependencyVisitor"` | `String` | A flag indicating which visitor should be used to "flatten" the dependency graph into list. In Maven 4 the default is new "levelOrder", while Maven 3 used "preOrder". This property accepts values "preOrder", "postOrder" and "levelOrder". | `"levelOrder"` | 2.0.0 | No | Session Configuration |
-| `"aether.system.repositoryKeyFunction"` | `String` | Experimental: Configuration for system-wide "repository key" function. Accepted and recommended values: "nid" (default), "nid_hurl" and "ngurk", while "simple" is Maven 3 legacy, technically equivalent to "nid". For complete description see enum org.eclipse.aether.util.repository.RepositoryIdHelper.RepositoryKeyType in utils. Warning: repository key function affects Resolver fundamentally and may have unexpected results! Only change this if you know what you are doing! | `"nid"` | 2.0.14 | No | Session Configuration |
-| `"aether.transport.apache.followRedirects"` | `Boolean` | If enabled, Apache HttpClient will follow HTTP redirects. | `true` | 2.0.2 | Yes | Session Configuration |
-| `"aether.transport.apache.https.cipherSuites"` | `String` | Comma-separated list of Cipher Suites which are enabled for HTTPS connections. | - | 2.0.0 | No | Session Configuration |
-| `"aether.transport.apache.https.protocols"` | `String` | Comma-separated list of Protocols which are enabled for HTTPS connections. | - | 2.0.0 | No | Session Configuration |
-| `"aether.transport.apache.maxRedirects"` | `Integer` | The max redirect count to follow. | `5` | 2.0.2 | Yes | Session Configuration |
-| `"aether.transport.apache.retryHandler.name"` | `String` | The name of retryHandler, supported values are “standard”, that obeys RFC-2616, regarding idempotent methods, and “default” that considers requests w/o payload as idempotent. | `"standard"` | 2.0.0 | Yes | Session Configuration |
-| `"aether.transport.apache.retryHandler.requestSentEnabled"` | `Boolean` | Set to true if it is acceptable to retry non-idempotent requests, that have been sent. | `false` | 2.0.0 | Yes | Session Configuration |
-| `"aether.transport.apache.useSystemProperties"` | `Boolean` | If enabled, underlying Apache HttpClient will use system properties as well to configure itself (typically used to set up HTTP Proxy via Java system properties). See HttpClientBuilder for used properties. This mode is not recommended, better use documented ways of configuration instead. | `false` | 2.0.0 | Yes | Session Configuration |
-| `"aether.transport.classpath.loader"` | `ClassLoader` | The key in the repository session's RepositorySystemSession#getConfigProperties() configurationproperties used to store a ClassLoader from which resources should be retrieved. If unspecified, the Thread#getContextClassLoader() context class loader of the current thread will be used. | - | | No | Session Configuration |
-| `"aether.transport.http.connectTimeout"` | `Integer` | The maximum amount of time (in milliseconds) to wait for a successful connection to a remote server. Non-positive values indicate no timeout. | `30000` | | Yes | Session Configuration |
-| `"aether.transport.http.connectionMaxTtl"` | `Integer` | Total time to live in seconds for an HTTP connection, after that time, the connection will be dropped (no matter for how long it was idle). | `300` | 1.9.8 | Yes | Session Configuration |
-| `"aether.transport.http.credentialEncoding"` | `String` | The encoding/charset to use when exchanging credentials with HTTP servers. Besides this general key, clients may also specify the encoding for a specific remote repository by appending the suffix .<repoId> to this key when storing the charset name. | `"ISO-8859-1"` | | Yes | Session Configuration |
-| `"aether.transport.http.expectContinue"` | `Boolean` | Boolean flag should the HTTP transport use expect-continue handshake for PUT requests. Not all transport support this option. This option may be needed for some broken HTTP servers. Default value corresponds to given transport default one (resolver does not override those), but if configuration IS given, it will replace given transport own default value. | - | 1.9.17 | Yes | Session Configuration |
-| `"aether.transport.http.headers"` | `java.util.Map` | The request headers to use for HTTP-based repository connectors. The headers are specified using a Map , mapping a header name to its value. Besides this general key, clients may also specify headers for a specific remote repository by appending the suffix .<repoId> to this key when storing the headers map. The repository-specific headers map is supposed to be complete, i.e. is not merged with the general headers map. | - | | Yes | Session Configuration |
-| `"aether.transport.http.localAddress"` | `String` | The local address (interface) to use with HTTP transport. Not all transport supports this option. | - | 2.0.0 | Yes | Session Configuration |
-| `"aether.transport.http.maxConnectionsPerRoute"` | `Integer` | The maximum concurrent connections per route HTTP client is allowed to use. | `50` | 1.9.8 | Yes | Session Configuration |
-| `"aether.transport.http.preemptiveAuth"` | `Boolean` | Should HTTP client use preemptive-authentication for all HTTP verbs (works only w/ BASIC). By default, is disabled, as it is considered less secure. This affects both proxy and regular server authentication. | `false` | 1.9.6 | Yes | Session Configuration |
-| `"aether.transport.http.preemptivePutAuth"` | `Boolean` | Boolean flag should the HTTP transport use preemptive-auth for PUT requests. Not all transport support this option. This affects both proxy and regular server authentication. | `true` | 2.0.0 (moved out from maven-resolver-transport-http). | Yes | Session Configuration |
-| `"aether.transport.http.requestTimeout"` | `Integer` | The maximum amount of time (in milliseconds) to wait for remaining data to arrive from a remote server. Note that this timeout does not restrict the overall duration of a request, it only restricts the duration of inactivity between consecutive data packets. Non-positive values indicate no timeout. | `1800000` | | Yes | Session Configuration |
-| `"aether.transport.http.retryHandler.count"` | `Integer` | The maximum number of times a request to a remote server should be retried in case of an error. | `3` | 1.9.6 | Yes | Session Configuration |
-| `"aether.transport.http.retryHandler.interval"` | `Long` | The initial retry interval in millis of request to a remote server should be waited in case of "too many requests" (HTTP codes 429 and 503). Accepts long as milliseconds. This value is used if remote server does not use Retry-After header, in which case Server value is obeyed. | `5000l` | 1.9.16 | Yes | Session Configuration |
-| `"aether.transport.http.retryHandler.intervalMax"` | `Long` | The maximum retry interval in millis of request to a remote server above which the request should be aborted instead. In theory, a malicious server could tell Maven "come back after 100 years" that would stall the build for some. Using this parameter Maven will fail the request instead, if interval is above this value. | `300000l` | 1.9.16 | Yes | Session Configuration |
-| `"aether.transport.http.retryHandler.serviceUnavailable"` | `String` | The HTTP codes of remote server responses that should be handled as "too many requests" (examples: HTTP codes 429 and 503). Accepts comma separated list of HTTP response codes. | `"429,503"` | 1.9.16 | Yes | Session Configuration |
-| `"aether.transport.http.reuseConnections"` | `Boolean` | Should HTTP client reuse connections (in other words, pool connections) or not? | `true` | 1.9.8 | Yes | Session Configuration |
-| `"aether.transport.http.supportWebDav"` | `Boolean` | Boolean flag should the HTTP transport support WebDAV remote. Not all transport support this option. | `false` | 2.0.0 (moved out from maven-resolver-transport-http). | Yes | Session Configuration |
-| `"aether.transport.http.userAgent"` | `String` | The user agent that repository connectors should report to servers. | `"Aether"` | | No | Session Configuration |
-| `"aether.transport.https.securityMode"` | `String` | The mode that sets HTTPS transport "security mode": to ignore any SSL errors (certificate validity checks, hostname verification). The default value is #HTTPS_SECURITY_MODE_DEFAULT . | `"default"` | 1.9.6 | Yes | Session Configuration |
-| `"aether.transport.jdk.httpVersion"` | `String` | Use string representation of HttpClient version enum "HTTP_2" or "HTTP_1_1" to set default HTTP protocol to use. | `"HTTP_1_1"` | 2.0.0 | Yes | Session Configuration |
-| `"aether.transport.jdk.maxConcurrentRequests"` | `Integer` | The hard limit of maximum concurrent requests JDK transport can do. This is a workaround for the fact, that in HTTP/2 mode, JDK HttpClient initializes this value to Integer.MAX_VALUE (!) and lowers it on first response from the remote server (but it may be too late). See JDK bug JDK-8225647 for details. | `100` | 2.0.0 | Yes | Session Configuration |
-| `"aether.transport.jetty.followRedirects"` | `Boolean` | If enabled, Jetty client will follow HTTP redirects. | `true` | 2.0.1 | Yes | Session Configuration |
-| `"aether.transport.jetty.maxRedirects"` | `Integer` | The max redirect count to follow. | `5` | 2.0.1 | Yes | Session Configuration |
-| `"aether.transport.minio.fixedBucketName"` | `String` | The fixed bucket name to use. | `"maven"` | 2.0.2 | Yes | Session Configuration |
-| `"aether.transport.minio.objectNameMapper"` | `String` | Object name mapper to use. | `"fixedBucket"` | 2.0.2 | Yes | Session Configuration |
-| `"aether.transport.wagon.config"` | `Object` | The configuration to use for the Wagon provider. | - | | Yes | Session Configuration |
-| `"aether.transport.wagon.perms.dirMode"` | `String` | Octal numerical notation of permissions to set for newly created directories. Only considered by certain Wagon providers. | - | | Yes | Session Configuration |
-| `"aether.transport.wagon.perms.fileMode"` | `String` | Octal numerical notation of permissions to set for newly created files. Only considered by certain Wagon providers. | - | | Yes | Session Configuration |
-| `"aether.transport.wagon.perms.group"` | `String` | Group which should own newly created directories/files. Only considered by certain Wagon providers. | - | | Yes | Session Configuration |
-| `"aether.trustedChecksumsSource.repositoryKeyFunction"` | `String` | Experimental: Configuration for "repository key" function. Note: repository key functions other than "nid" produce repository keys will be way different that those produced with previous versions or without this option enabled. Checksum source uses this key function to lay down and look up files to use in sources. | `"nid"` | 2.0.14 | No | Session Configuration |
-| `"aether.trustedChecksumsSource.sparseDirectory"` | `Boolean` | Is checksum source enabled? | `false` | 1.9.0 | No | Session Configuration |
-| `"aether.trustedChecksumsSource.sparseDirectory.basedir"` | `String` | The basedir where checksums are. If relative, is resolved from local repository root. | `".checksums"` | 1.9.0 | No | Session Configuration |
-| `"aether.trustedChecksumsSource.sparseDirectory.originAware"` | `Boolean` | Is source origin aware? | `true` | 1.9.0 | No | Session Configuration |
-| `"aether.trustedChecksumsSource.summaryFile"` | `Boolean` | Is checksum source enabled? | `false` | 1.9.0 | No | Session Configuration |
-| `"aether.trustedChecksumsSource.summaryFile.basedir"` | `String` | The basedir where checksums are. If relative, is resolved from local repository root. | `".checksums"` | 1.9.0 | No | Session Configuration |
-| `"aether.trustedChecksumsSource.summaryFile.originAware"` | `Boolean` | Is source origin aware? | `true` | 1.9.0 | No | Session Configuration |
-| `"aether.updateCheckManager.sessionState"` | `String` | Manages the session state, i.e. influences if the same download requests to artifacts/metadata will happen multiple times within the same RepositorySystemSession. If "enabled" will enable the session state. If "bypass" will enable bypassing (i.e. store all artifact ids/metadata ids which have been updates but not evaluating those). All other values lead to disabling the session state completely. | `"enabled"` | | No | Session Configuration |
-| `"aether.util.versionScheme.cacheDebug"` | `Boolean` | A flag indicating whether version scheme cache statistics should be printed on JVM shutdown. This is useful for analyzing cache performance and effectiveness in development and testing scenarios. | `false` | 2.0.10 | No | Session Configuration |
-
-
-All properties which have `yes` in the column `Supports Repo ID Suffix` can be optionally configured specifically for a repository id. In that case the configuration property needs to be suffixed with a period followed by the repository id of the repository to configure, e.g. `aether.connector.http.headers.central` for repository with id `central`.
-
-## Property Type Conversion
-
-If the value is not given in the target type the following conversions are applied.
-
-From | To | With
---- | --- | ---
-`String` | `boolean` | [`Boolean.parseBoolean(...)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html#parseBoolean(java.lang.String))
-`String` | `int` | [`Integer.parseInt(...)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String))
-`String` | `long` | [`Long.parseLong(...)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#parseLong(java.lang.String))
-`String` | `float` | [`Float.parseFloat(...)`](https://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#parseFloat(java.lang.String))
-
-## Set Configuration from Apache Maven
-
-To set one of the configuration options from above just use system variables. As system variables only support String values the type conversion mentioned above needs to be leveraged.
-Sometimes Maven uses different default values than the Maven Resolver itself or tries to extract certain values from the `settings.xml`. For details refer to [`DefaultRepositorySystemSessionFactory`](https://github.com/apache/maven/blob/master/impl/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java).
-