Configuration Options

OptionTypeDescriptionDefault ValueSupports Repo ID Suffix
aether.artifactResolver.snapshotNormalizationbooleanIt replaces the timestamped snapshot file name with a filename containing the SNAPSHOT qualifier only. This only affects resolving/retrieving artifacts but not uploading those.trueno
aether.artifactResolver.simpleLrmInteropbooleanEnable interop with Simple LRM. Ignored when RRF used.falseno
aether.artifactResolver.postProcessor.trustedChecksumsbooleanEnable trustedChecksums resolver post processor.falseno
aether.artifactResolver.postProcessor.trustedChecksums.checksumAlgorithmsStringComma-separated list of checksum algorithms with which trustedChecksums should operate (validate or record)."SHA-1"no
aether.artifactResolver.postProcessor.trustedChecksums.failIfMissingbooleanMakes trustedChecksums fail validation if a trusted checksum for an artifact is missing.falseno
aether.artifactResolver.postProcessor.trustedChecksums.recordbooleanMakes trustedChecksums calculate and record checksums.falseno
aether.artifactResolver.postProcessor.trustedChecksums.snapshotsbooleanEnables or disables snapshot processing in trustedChecksums post processor.falseno
aether.checksums.omitChecksumsForExtensionsStringComma-separated list of extensions with leading dot (example .asc) that should have checksums omitted. These are applied to sub-artifacts only. Note: to achieve 1.7.x aether.checksums.forSignature=true behaviour, pass empty string as value for this property..asc,.sigstoreno
aether.checksums.algorithmsStringComma-separated list of checksum algorithms with which checksums are validated (downloaded) and generated (uploaded). Resolver by default supports following algorithms: MD5, SHA-1, SHA-256 and SHA-512. New algorithms can be added by implementing ChecksumAlgorithmFactory component."SHA-1,MD5"yes
aether.conflictResolver.verbosebooleanFlag controlling the conflict resolver's verbose mode.falseno
aether.connector.basic.threads or maven.artifact.threadsintNumber of threads to use for uploading/downloading.5no
aether.connector.basic.parallelPutbooleanEnables or disables parallel PUT processing (parallel deploys) on basic connector globally or per remote repository. When disabled, connector behaves exactly as in Maven 3.8.x did: GETs are parallel while PUTs are sequential.trueyes
aether.connector.classpath.loaderClassLoaderClassLoader from which resources should be retrieved which start with the classpath: protocol.Thread.currentThread().getContextClassLoader()no
aether.connector.connectTimeoutlongConnect timeout in milliseconds.10000yes
aether.connector.http.cacheStatebooleanFlag indicating whether a memory-based cache is used for user tokens, connection managers, expect continue requests and authentication schemes.trueno
aether.connector.http.connectionMaxTtlintTime to live in seconds for an HTTP connection, after that time, the connection will be dropped.600yes
aether.connector.http.credentialEncodingStringThe encoding/charset to use when exchanging credentials with HTTP servers."ISO-8859-1"yes
aether.connector.http.headersMap<String, String>The request headers to use for HTTP-based repository connectors. The headers are specified using a map of strings mapping a header name to its value. The repository-specific headers map is supposed to be complete, i.e. is not merged with the general headers map.-yes
aether.connector.http.maxConnectionsPerRouteintThe maximum concurrent connections per route HTTP client is allowed to use.50yes
aether.connector.http.preemptiveAuthbooleanShould HTTP client use preemptive-authentication for all HTTP verbs (works only w/ BASIC). By default is disabled, as it is considered less secure.falseyes
aether.connector.http.preemptivePutAuthbooleanShould HTTP client use preemptive-authentication for HTTP PUTs only (works only w/ BASIC). By default is enabled (same as Wagon).trueyes
aether.connector.http.retryHandler.countintThe maximum number of times a request to a remote HTTP server should be retried in case of an error.3yes
aether.connector.http.retryHandler.nameStringThe name of retryHandler, supported values are “standard”, that obeys RFC-2616, regarding idempotent methods, and “default” that considers requests w/o payload as idempotent.standardyes
aether.connector.http.retryHandler.requestSentEnabledbooleanSet to true if it is acceptable to retry non-idempotent requests, that have been sent.falseyes
aether.connector.http.reuseConnectionsbooleanShould HTTP client reuse connections (in other words, pool connections) or not?trueyes
aether.connector.http.supportWebDavbooleanIf enabled, transport makes best effort to deploy to WebDAV server. This mode is not recommended, better use real Maven Repository Manager instead.falseyes
aether.connector.http.useSystemPropertiesbooleanIf 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.falseyes
aether.connector.https.cipherSuitesStringComma-separated list of Cipher Suites which are enabled for HTTPS connections.- (no restriction)no
aether.connector.https.securityModeStringUsing this flag resolver may set the “security mode” of HTTPS connector. Any other mode than ‘default’ is NOT MEANT for production, as it is inherently not secure. Accepted values: “default”, “insecure” (ignore any kind of certificate validation errors and hostname validation checks)."default"yes
aether.connector.https.protocolsStringComma-separated list of Protocols which are enabled for HTTPS connections.- (no restriction)no
aether.connector.perms.fileModeStringOctal numerical notation of permissions to set for newly created files. Only considered by certain Wagon providers.-no
aether.connector.perms.dirModeStringOctal numerical notation of permissions to set for newly created directories. Only considered by certain Wagon providers.-no
aether.connector.perms.groupStringGroup which should own newly created directories/files. Only considered by certain Wagon providers.-no
aether.connector.persistedChecksumsbooleanFlag indicating whether checksums which are retrieved during checksum validation should be persisted in the local filesystem next to the file they provide the checksum for.trueno
aether.connector.requestTimeoutlongRequest timeout in milliseconds.1800000yes
aether.connector.smartChecksumsbooleanFlag indicating that instead of comparing the external checksum fetched from the remote repo with the calculated one, it should try to extract the reference checksum from the actual artifact requests's response headers (several (strategies supported)[included-checksum-strategies.html]). This only works for transport-http transport.trueno
aether.connector.userAgentStringThe user agent that repository connectors should report to servers."Aether"no
aether.connector.wagon.configObjectThe configuration to use for the Wagon provider.-yes (must be used)
aether.dependencyCollector.maxCyclesintOnly up to the given amount cyclic dependencies are emitted.10no
aether.dependencyCollector.maxExceptionsintOnly exceptions up to the number given in this configuration property are emitted. Exceptions which exceed that number are swallowed.50no
aether.dependencyCollector.implStringThe name of the dependency collector implementation to use: depth-first (original) named df, and breadth-first (new in 1.8.0) named bf. Both collectors produce equivalent results, but they may differ performance wise, depending on project being applied to. Our experience shows that existing df is well suited for smaller to medium size projects, while bf may perform better on huge projects with many dependencies. Experiment (and come back to us!) to figure out which one suits you the better."df"no
aether.dependencyCollector.bf.skipperbooleanFlag controlling whether to skip resolving duplicate/conflicting nodes during the breadth-first (bf) dependency collection process.trueno
aether.dependencyCollector.bf.threads or maven.artifact.threadsintNumber of threads to use for collecting POMs and version ranges in BF collector.5no
aether.dependencyCollector.pool.artifactStringFlag controlling interning data pool type used by dependency collector for Artifact instances, matters for heap consumption. By default uses “weak” references (consume less heap). Using “hard” will make it much more memory aggressive and possibly faster (system and Java dependent). Supported values: "hard", "weak"."weak"no
aether.dependencyCollector.pool.dependencyStringFlag controlling interning data pool type used by dependency collector for Dependency instances, matters for heap consumption. By default uses “weak” references (consume less heap). Using “hard” will make it much more memory aggressive and possibly faster (system and Java dependent). Supported values: "hard", "weak"."weak"no
aether.dependencyCollector.pool.descriptorStringFlag controlling interning data pool type used by dependency collector for Artifact Descriptor (POM) instances, matters for heap consumption. By default uses “hard” references (consume more heap, but is faster). Using “weak” will make resolver much more memory conservative, at the cost of up to 10% slower collecting dependency speed (system and Java dependent). Supported values: "hard", "weak"."hard"no
aether.dependencyManager.verbosebooleanFlag controlling the verbose mode for dependency management. If enabled, the original attributes of a dependency before its update due to dependency managemnent will be recorded in the node's DependencyNode#getData() when building a dependency graph.falseno
aether.enhancedLocalRepository.localPrefixStringThe prefix to use for locally installed artifacts."installed"no
aether.enhancedLocalRepository.snapshotsPrefixStringThe prefix to use for snapshot artifacts."snapshots"no
aether.enhancedLocalRepository.splitbooleanWhether LRM should split local and remote artifacts.falseno
aether.enhancedLocalRepository.splitLocalbooleanWhether locally installed artifacts should be split by version (release/snapshot).falseno
aether.enhancedLocalRepository.splitRemotebooleanWhether cached artifacts should be split by version (release/snapshot).falseno
aether.enhancedLocalRepository.splitRemoteRepositorybooleanWhether cached artifacts should be split by origin repository (repository ID).falseno
aether.enhancedLocalRepository.splitRemoteRepositoryLastbooleanFor cached artifacts, if both splitRemote and splitRemoteRepository are set to true sets the splitting order: by default it is repositoryId/version (false) or version/repositoryId (true)falseno
aether.enhancedLocalRepository.remotePrefixStringThe prefix to use for downloaded and cached artifacts."cached"no
aether.enhancedLocalRepository.releasesPrefixStringThe prefix to use for release artifacts."releases"no
aether.enhancedLocalRepository.trackingFilenameStringFilename of the file in which to track the remote repositories."_remote.repositories"no
aether.interactivebooleanA flag indicating whether interaction with the user is allowed.falseno
aether.metadataResolver.threadsintNumber of threads to use in parallel for resolving metadata.4no
aether.offline.protocolsStringComma-separated list of protocols which are supposed to be resolved offline.-no
aether.offline.hostsStringComma-separated list of hosts which are supposed to be resolved offline.-no
aether.priority.<class>floatThe priority to use for a certain extension class. class can either be the fully qualified name or the simple name stands for fully qualified class name. If the class name ends with Factory that suffix could optionally be left out.-no
aether.priority.implicitbooleanFlag 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.<class> 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.falseno
aether.remoteRepositoryFilter.groupIdbooleanEnable groupId remote repository filter.falseno
aether.remoteRepositoryFilter.groupId.basedirStringThe basedir path for groupId filter. If relative, resolved against local repository root, if absolute, used as is.".remoteRepositoryFilters"no
aether.remoteRepositoryFilter.groupId.recordbooleanEnable recording of groupId filter.falseno
aether.remoteRepositoryFilter.groupId.truncateOnSavebooleanWhen recoding session done, should groupId filter truncate (overwrite) the output file with newly recorded data, or, if file exists, load-merge-save it?falseno
aether.remoteRepositoryFilter.prefixesbooleanEnable prefixes remote repository filter.falseno
aether.remoteRepositoryFilter.prefixes.basedirStringThe basedir path for prefixes filter. If relative, resolved against local repository root, if absolute, used as is.".remoteRepositoryFilters"no
aether.snapshotFilterbooleanFlag whether the ContextualSnapshotVersionFilter should be forced to ban snapshots. By default, snapshots are only filtered if the root artifact is not a snapshot.falseno
aether.syncContext.named.basedir.locksDirStringThe basedir path for file named locks. If relative, resolved against local repository root, if absolute, used as is.".locks"no
aether.syncContext.named.factoryStringName of the named lock factory implementing the org.eclipse.aether.named.NamedLockFactory interface."rwlock-local"no
aether.syncContext.named.hashing.depthintThe directory depth to “spread” hashes in git-like fashion, integer between 0 and 4 (inclusive).2no
aether.syncContext.named.nameMapperStringName of name mapper implementing the org.eclipse.aether.internal.impl.synccontext.named.NameMapper interface."gav"no
aether.syncContext.named.retryintCount of retries SyncContext adapter should perform, when obtaining locks.1no
aether.syncContext.named.retry.waitlongAmount of milliseconds a thread to wait between retries, when obtaining locks.200no
aether.syncContext.named.timelongAmount of time a synchronization context shall wait to obtain a lock.30no
aether.syncContext.named.time.unitlongUnit of the lock wait time."SECONDS"no
aether.syncContext.named.discriminating.discriminatorStringA discriminator name prefix identifying a Resolver instance."sha1('${hostname:-localhost}:${maven.repo.local}')" or "sha1('')" if generation failsno
aether.syncContext.named.discriminating.hostnameStringThe hostname to be used with discriminating mapper.Detected with InetAddress.getLocalHost().getHostName()no
aether.syncContext.named.redisson.configFileStringPath to a Redisson configuration file in YAML format. Read official documentation for details.none or "${maven.conf}/maven-resolver-redisson.yaml" if presentno
aether.trustedChecksumsSource.sparseDirectorybooleanEnable sparseDirectory trusted checksum source.falseno
aether.trustedChecksumsSource.sparseDirectory.basedirStringThe basedir path for sparseDirectory trusted checksum source. If relative, resolved against local repository root, if absolute, used as is.".checksums"no
aether.trustedChecksumsSource.sparseDirectory.originAwarebooleanIs trusted checksum source origin aware (factors in Repository ID into path) or not.trueno
aether.trustedChecksumsSource.summaryFilebooleanEnable summaryFile trusted checksum source.falseno
aether.trustedChecksumsSource.summaryFile.basedirStringThe basedir path for summaryFile trusted checksum source. If relative, resolved against local repository root, if absolute, used as is.".checksums"no
aether.trustedChecksumsSource.summaryFile.originAwarebooleanIs trusted checksum source origin aware (factors in Repository ID into path) or not.trueno
aether.updateCheckManager.sessionStateStringManages 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

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.

FromToWith
StringbooleanBoolean.parseBoolean(...)
StringintInteger.parseInt(...)
StringlongLong.parseLong(...)
StringfloatFloat.parseFloat(...)

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 https://github.com/apache/maven/blob/master/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java.