1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.eclipse.aether; 20 21 /** 22 * The keys and defaults for common configuration properties. 23 * 24 * @see RepositorySystemSession#getConfigProperties() 25 */ 26 public final class ConfigurationProperties { 27 28 private static final String PREFIX_AETHER = "aether."; 29 30 private static final String PREFIX_CONNECTOR = PREFIX_AETHER + "connector."; 31 32 /** 33 * The prefix for properties that control the priority of pluggable extensions like transporters. For example, for 34 * an extension with the fully qualified class name "org.eclipse.MyExtensionFactory", the configuration properties 35 * "aether.priority.org.eclipse.MyExtensionFactory", "aether.priority.MyExtensionFactory" and 36 * "aether.priority.MyExtension" will be consulted for the priority, in that order (obviously, the last key is only 37 * tried if the class name ends with "Factory"). The corresponding value is a float and the special value 38 * {@link Float#NaN} or "NaN" (case-sensitive) can be used to disable the extension. 39 */ 40 public static final String PREFIX_PRIORITY = PREFIX_AETHER + "priority."; 41 42 /** 43 * A flag indicating whether the priorities of pluggable extensions are implicitly given by their iteration order 44 * such that the first extension has the highest priority. If set, an extension's built-in priority as well as any 45 * corresponding {@code aether.priority.*} configuration properties are ignored when searching for a suitable 46 * implementation among the available extensions. This priority mode is meant for cases where the application will 47 * present/inject extensions in the desired search order. 48 * 49 * @see #DEFAULT_IMPLICIT_PRIORITIES 50 */ 51 public static final String IMPLICIT_PRIORITIES = PREFIX_PRIORITY + "implicit"; 52 53 /** 54 * The default extension priority mode if {@link #IMPLICIT_PRIORITIES} isn't set. 55 */ 56 public static final boolean DEFAULT_IMPLICIT_PRIORITIES = false; 57 58 /** 59 * A flag indicating whether the created ordered components should be cached or not. 60 * 61 * @see #DEFAULT_CACHED_PRIORITIES 62 * @since TBD 63 */ 64 public static final String CACHED_PRIORITIES = PREFIX_PRIORITY + "cached"; 65 66 /** 67 * The default caching of priority components if {@link #CACHED_PRIORITIES} isn't set. Default value is {@code true}. 68 * 69 * @since TBD 70 */ 71 public static final boolean DEFAULT_CACHED_PRIORITIES = true; 72 73 /** 74 * A flag indicating whether interaction with the user is allowed. 75 * 76 * @see #DEFAULT_INTERACTIVE 77 */ 78 public static final String INTERACTIVE = PREFIX_AETHER + "interactive"; 79 80 /** 81 * The default interactive mode if {@link #INTERACTIVE} isn't set. 82 */ 83 public static final boolean DEFAULT_INTERACTIVE = false; 84 85 /** 86 * The user agent that repository connectors should report to servers. 87 * 88 * @see #DEFAULT_USER_AGENT 89 */ 90 public static final String USER_AGENT = PREFIX_CONNECTOR + "userAgent"; 91 92 /** 93 * The default user agent to use if {@link #USER_AGENT} isn't set. 94 */ 95 public static final String DEFAULT_USER_AGENT = "Aether"; 96 97 /** 98 * The maximum amount of time (in milliseconds) to wait for a successful connection to a remote server. Non-positive 99 * values indicate no timeout. 100 * 101 * @see #DEFAULT_CONNECT_TIMEOUT 102 */ 103 public static final String CONNECT_TIMEOUT = PREFIX_CONNECTOR + "connectTimeout"; 104 105 /** 106 * The default connect timeout to use if {@link #CONNECT_TIMEOUT} isn't set. 107 */ 108 public static final int DEFAULT_CONNECT_TIMEOUT = 10 * 1000; 109 110 /** 111 * The maximum amount of time (in milliseconds) to wait for remaining data to arrive from a remote server. Note that 112 * this timeout does not restrict the overall duration of a request, it only restricts the duration of inactivity 113 * between consecutive data packets. Non-positive values indicate no timeout. 114 * 115 * @see #DEFAULT_REQUEST_TIMEOUT 116 */ 117 public static final String REQUEST_TIMEOUT = PREFIX_CONNECTOR + "requestTimeout"; 118 119 /** 120 * The default request timeout to use if {@link #REQUEST_TIMEOUT} isn't set. 121 */ 122 public static final int DEFAULT_REQUEST_TIMEOUT = 1800 * 1000; 123 124 /** 125 * The request headers to use for HTTP-based repository connectors. The headers are specified using a 126 * {@code Map<String, String>}, mapping a header name to its value. Besides this general key, clients may also 127 * specify headers for a specific remote repository by appending the suffix {@code .<repoId>} to this key when 128 * storing the headers map. The repository-specific headers map is supposed to be complete, i.e. is not merged with 129 * the general headers map. 130 */ 131 public static final String HTTP_HEADERS = PREFIX_CONNECTOR + "http.headers"; 132 133 /** 134 * The encoding/charset to use when exchanging credentials with HTTP servers. Besides this general key, clients may 135 * also specify the encoding for a specific remote repository by appending the suffix {@code .<repoId>} to this key 136 * when storing the charset name. 137 * 138 * @see #DEFAULT_HTTP_CREDENTIAL_ENCODING 139 */ 140 public static final String HTTP_CREDENTIAL_ENCODING = PREFIX_CONNECTOR + "http.credentialEncoding"; 141 142 /** 143 * The default encoding/charset to use if {@link #HTTP_CREDENTIAL_ENCODING} isn't set. 144 */ 145 public static final String DEFAULT_HTTP_CREDENTIAL_ENCODING = "ISO-8859-1"; 146 147 /** 148 * The maximum number of times a request to a remote server should be retried in case of an error. 149 * 150 * @see #DEFAULT_HTTP_RETRY_HANDLER_COUNT 151 * @since 1.9.6 152 */ 153 public static final String HTTP_RETRY_HANDLER_COUNT = PREFIX_CONNECTOR + "http.retryHandler.count"; 154 155 /** 156 * The default number of retries to use if {@link #HTTP_RETRY_HANDLER_COUNT} isn't set. 157 * 158 * @since 1.9.6 159 */ 160 public static final int DEFAULT_HTTP_RETRY_HANDLER_COUNT = 3; 161 162 /** 163 * The initial retry interval of request to a remote server should be waited in case of "too many requests" 164 * (HTTP codes 429 and 503). Accepts long as milliseconds. This value is used if remote server does not use 165 * {@code Retry-After} header, in which case Server value is obeyed. 166 * 167 * @see #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL 168 * @since 1.9.16 169 */ 170 public static final String HTTP_RETRY_HANDLER_INTERVAL = PREFIX_CONNECTOR + "http.retryHandler.interval"; 171 172 /** 173 * The default initial retry interval to use if {@link #HTTP_RETRY_HANDLER_INTERVAL} isn't set. 174 * Default value 5000ms. 175 * 176 * @since 1.9.16 177 */ 178 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL = 5000L; 179 180 /** 181 * The maximum retry interval of request to a remote server above which the request should be aborted instead. 182 * In theory, a malicious server could tell Maven "come back after 100 years" that would stall the build for 183 * some. Using this parameter Maven will fail the request instead, if interval is above this value. 184 * 185 * @see #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX 186 * @since 1.9.16 187 */ 188 public static final String HTTP_RETRY_HANDLER_INTERVAL_MAX = PREFIX_CONNECTOR + "http.retryHandler.intervalMax"; 189 190 /** 191 * The default retry interval maximum to use if {@link #HTTP_RETRY_HANDLER_INTERVAL_MAX} isn't set. 192 * Default value 5 minutes. 193 * 194 * @since 1.9.16 195 */ 196 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX = 300_000L; 197 198 /** 199 * The HTTP codes of remote server responses that should be handled as "too many requests" 200 * (examples: HTTP codes 429 and 503). Accepts comma separated list of HTTP response codes. 201 * 202 * @see #DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE 203 * @since 1.9.16 204 */ 205 public static final String HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE = 206 PREFIX_CONNECTOR + "http.retryHandler.serviceUnavailable"; 207 208 /** 209 * The default HTTP codes of remote server responses that should be handled as "too many requests". 210 * Default value: "429,503". 211 * 212 * @since 1.9.16 213 */ 214 public static final String DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE = "429,503"; 215 216 /** 217 * Should HTTP client use preemptive auth (w/ BASIC) or not? 218 * 219 * @see #DEFAULT_HTTP_PREEMPTIVE_AUTH 220 * @since 1.9.6 221 */ 222 public static final String HTTP_PREEMPTIVE_AUTH = PREFIX_CONNECTOR + "http.preemptiveAuth"; 223 224 /** 225 * The default value to use if {@link #HTTP_PREEMPTIVE_AUTH} isn't set (false). 226 * 227 * @since 1.9.6 228 */ 229 public static final boolean DEFAULT_HTTP_PREEMPTIVE_AUTH = false; 230 231 /** 232 * Should HTTP client reuse connections (in other words, pool connections) or not? 233 * 234 * @see #DEFAULT_HTTP_REUSE_CONNECTIONS 235 * @since 1.9.8 236 */ 237 public static final String HTTP_REUSE_CONNECTIONS = PREFIX_CONNECTOR + "http.reuseConnections"; 238 239 /** 240 * The default value to use if {@link #HTTP_REUSE_CONNECTIONS} isn't set (true). 241 * 242 * @since 1.9.8 243 */ 244 public static final boolean DEFAULT_HTTP_REUSE_CONNECTIONS = true; 245 246 /** 247 * Total time to live in seconds for an HTTP connection, after that time, the connection will be dropped 248 * (no matter for how long it was idle). 249 * 250 * @see #DEFAULT_HTTP_CONNECTION_MAX_TTL 251 * @since 1.9.8 252 */ 253 public static final String HTTP_CONNECTION_MAX_TTL = PREFIX_CONNECTOR + "http.connectionMaxTtl"; 254 255 /** 256 * The default value to use if {@link #HTTP_CONNECTION_MAX_TTL} isn't set (300 seconds). 257 * 258 * @since 1.9.8 259 */ 260 public static final int DEFAULT_HTTP_CONNECTION_MAX_TTL = 300; 261 262 /** 263 * The maximum concurrent connections per route HTTP client is allowed to use. 264 * 265 * @see #DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE 266 * @since 1.9.8 267 */ 268 public static final String HTTP_MAX_CONNECTIONS_PER_ROUTE = PREFIX_CONNECTOR + "http.maxConnectionsPerRoute"; 269 270 /** 271 * The default value to use if {@link #HTTP_MAX_CONNECTIONS_PER_ROUTE} isn't set (50 connections). 272 * 273 * @since 1.9.8 274 */ 275 public static final int DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE = 50; 276 277 /** 278 * The mode that sets HTTPS transport "security mode": to ignore any SSL errors (certificate validity checks, 279 * hostname verification). The default value is {@link #HTTPS_SECURITY_MODE_DEFAULT}. 280 * 281 * @see #HTTPS_SECURITY_MODE_DEFAULT 282 * @see #HTTPS_SECURITY_MODE_INSECURE 283 * @since 1.9.6 284 */ 285 public static final String HTTPS_SECURITY_MODE = PREFIX_CONNECTOR + "https.securityMode"; 286 287 /** 288 * The default HTTPS security mode. 289 * 290 * @since 1.9.6 291 */ 292 public static final String HTTPS_SECURITY_MODE_DEFAULT = "default"; 293 294 /** 295 * The insecure HTTPS security mode (certificate validation, hostname verification are all ignored). 296 * 297 * @since 1.9.6 298 */ 299 public static final String HTTPS_SECURITY_MODE_INSECURE = "insecure"; 300 301 /** 302 * A flag indicating whether checksums which are retrieved during checksum validation should be persisted in the 303 * local filesystem next to the file they provide the checksum for. 304 * 305 * @see #DEFAULT_PERSISTED_CHECKSUMS 306 */ 307 public static final String PERSISTED_CHECKSUMS = PREFIX_CONNECTOR + "persistedChecksums"; 308 309 /** 310 * The default checksum persistence mode if {@link #PERSISTED_CHECKSUMS} isn't set. 311 */ 312 public static final boolean DEFAULT_PERSISTED_CHECKSUMS = true; 313 314 /** 315 * A flag indicating which visitor should be used to "flatten" the dependency graph into list. Default is 316 * same as in older resolver versions "preOrder", while it can accept values like "postOrder" and "levelOrder". 317 * 318 * @see #DEFAULT_REPOSITORY_SYSTEM_RESOLVER_DEPENDENCIES_VISITOR 319 * @since TBD 320 */ 321 public static final String REPOSITORY_SYSTEM_RESOLVER_DEPENDENCIES_VISITOR = 322 PREFIX_AETHER + "system.resolveDependencies.visitor"; 323 324 /** 325 * The default visitor strategy "preOrder". 326 * 327 * @since TBD 328 */ 329 public static final String DEFAULT_REPOSITORY_SYSTEM_RESOLVER_DEPENDENCIES_VISITOR = "preOrder"; 330 331 private ConfigurationProperties() { 332 // hide constructor 333 } 334 }