001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.eclipse.aether; 020 021/** 022 * The keys and defaults for common configuration properties. 023 * 024 * @see RepositorySystemSession#getConfigProperties() 025 */ 026public final class ConfigurationProperties { 027 028 /** 029 * Prefix for all configurations. <em>For internal use only.</em> 030 * 031 * @since 2.0.0 032 */ 033 public static final String PREFIX_AETHER = "aether."; 034 035 /** 036 * Prefix for repository system related configurations. <em>For internal use only.</em> 037 * 038 * @since 2.0.0 039 */ 040 public static final String PREFIX_SYSTEM = PREFIX_AETHER + "system."; 041 042 /** 043 * Prefix for sync context related configurations. <em>For internal use only.</em> 044 * 045 * @since 2.0.0 046 */ 047 public static final String PREFIX_SYNC_CONTEXT = PREFIX_AETHER + "syncContext."; 048 049 /** 050 * Prefix for connector related configurations. <em>For internal use only.</em> 051 * 052 * @since 2.0.0 053 */ 054 public static final String PREFIX_CONNECTOR = PREFIX_AETHER + "connector."; 055 056 /** 057 * Prefix for layout related configurations. <em>For internal use only.</em> 058 * 059 * @since 2.0.0 060 */ 061 public static final String PREFIX_LAYOUT = PREFIX_AETHER + "layout."; 062 063 /** 064 * Prefix for checksum related configurations. <em>For internal use only.</em> 065 * 066 * @since 2.0.0 067 */ 068 public static final String PREFIX_CHECKSUMS = PREFIX_AETHER + "checksums."; 069 070 /** 071 * Prefix for local repository manager related configurations. <em>For internal use only.</em> 072 * 073 * @since 2.0.0 074 */ 075 public static final String PREFIX_LRM = PREFIX_AETHER + "lrm."; 076 077 /** 078 * Prefix for generator related configurations. <em>For internal use only.</em> 079 * 080 * @since 2.0.0 081 */ 082 public static final String PREFIX_GENERATOR = PREFIX_AETHER + "generator."; 083 084 /** 085 * Prefix for transport related configurations. <em>For internal use only.</em> 086 * 087 * @since 2.0.0 088 */ 089 public static final String PREFIX_TRANSPORT = PREFIX_AETHER + "transport."; 090 091 /** 092 * Prefix for HTTP protocol related configurations. <em>For internal use only.</em> 093 * 094 * @since 2.0.0 095 */ 096 public static final String PREFIX_TRANSPORT_HTTP = PREFIX_TRANSPORT + "http."; 097 098 /** 099 * Prefix for HTTPS protocol related configurations. <em>For internal use only.</em> 100 * 101 * @since 2.0.0 102 */ 103 public static final String PREFIX_TRANSPORT_HTTPS = PREFIX_TRANSPORT + "https."; 104 105 /** 106 * The prefix for properties that control the priority of pluggable extensions like transporters. For example, for 107 * an extension with the fully qualified class name "org.eclipse.MyExtensionFactory", the configuration properties 108 * "aether.priority.org.eclipse.MyExtensionFactory", "aether.priority.MyExtensionFactory" and 109 * "aether.priority.MyExtension" will be consulted for the priority, in that order (obviously, the last key is only 110 * tried if the class name ends with "Factory"). The corresponding value is a float and the special value 111 * {@link Float#NaN} or "NaN" (case-sensitive) can be used to disable the extension. 112 */ 113 public static final String PREFIX_PRIORITY = PREFIX_AETHER + "priority."; 114 115 /** 116 * A flag indicating whether the priorities of pluggable extensions are implicitly given by their iteration order 117 * such that the first extension has the highest priority. If set, an extension's built-in priority as well as any 118 * corresponding {@code aether.priority.*} configuration properties are ignored when searching for a suitable 119 * implementation among the available extensions. This priority mode is meant for cases where the application will 120 * present/inject extensions in the desired search order. 121 * 122 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 123 * @configurationType {@link java.lang.Boolean} 124 * @configurationDefaultValue {@link #DEFAULT_IMPLICIT_PRIORITIES} 125 * @configurationRepoIdSuffix No 126 */ 127 public static final String IMPLICIT_PRIORITIES = PREFIX_PRIORITY + "implicit"; 128 129 /** 130 * The default extension priority mode if {@link #IMPLICIT_PRIORITIES} isn't set. 131 */ 132 public static final boolean DEFAULT_IMPLICIT_PRIORITIES = false; 133 134 /** 135 * A flag indicating whether the created ordered components should be cached in session. 136 * 137 * @since 2.0.0 138 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 139 * @configurationType {@link java.lang.Boolean} 140 * @configurationDefaultValue {@link #DEFAULT_CACHED_PRIORITIES} 141 * @configurationRepoIdSuffix No 142 */ 143 public static final String CACHED_PRIORITIES = PREFIX_PRIORITY + "cached"; 144 145 /** 146 * The default caching of priority components if {@link #CACHED_PRIORITIES} isn't set. Default value is {@code true}. 147 * 148 * @since 2.0.0 149 */ 150 public static final boolean DEFAULT_CACHED_PRIORITIES = true; 151 152 /** 153 * A flag indicating whether interaction with the user is allowed. 154 * 155 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 156 * @configurationType {@link java.lang.Boolean} 157 * @configurationDefaultValue {@link #DEFAULT_INTERACTIVE} 158 * @configurationRepoIdSuffix No 159 */ 160 public static final String INTERACTIVE = PREFIX_AETHER + "interactive"; 161 162 /** 163 * The default interactive mode if {@link #INTERACTIVE} isn't set. 164 */ 165 public static final boolean DEFAULT_INTERACTIVE = false; 166 167 /** 168 * The user agent that repository connectors should report to servers. 169 * 170 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 171 * @configurationType {@link java.lang.String} 172 * @configurationDefaultValue {@link #DEFAULT_USER_AGENT} 173 * @configurationRepoIdSuffix No 174 */ 175 public static final String USER_AGENT = PREFIX_TRANSPORT_HTTP + "userAgent"; 176 177 /** 178 * The default user agent to use if {@link #USER_AGENT} isn't set. 179 */ 180 public static final String DEFAULT_USER_AGENT = "Aether"; 181 182 /** 183 * The maximum amount of time (in milliseconds) to wait for a successful connection to a remote server. Non-positive 184 * values indicate no timeout. 185 * 186 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 187 * @configurationType {@link java.lang.Integer} 188 * @configurationDefaultValue {@link #DEFAULT_CONNECT_TIMEOUT} 189 * @configurationRepoIdSuffix Yes 190 */ 191 public static final String CONNECT_TIMEOUT = PREFIX_TRANSPORT_HTTP + "connectTimeout"; 192 193 /** 194 * The default connect timeout to use if {@link #CONNECT_TIMEOUT} isn't set. 195 */ 196 public static final int DEFAULT_CONNECT_TIMEOUT = 10 * 1000; 197 198 /** 199 * The maximum amount of time (in milliseconds) to wait for remaining data to arrive from a remote server. Note that 200 * this timeout does not restrict the overall duration of a request, it only restricts the duration of inactivity 201 * between consecutive data packets. Non-positive values indicate no timeout. 202 * 203 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 204 * @configurationType {@link java.lang.Integer} 205 * @configurationDefaultValue {@link #DEFAULT_REQUEST_TIMEOUT} 206 * @configurationRepoIdSuffix Yes 207 */ 208 public static final String REQUEST_TIMEOUT = PREFIX_TRANSPORT_HTTP + "requestTimeout"; 209 210 /** 211 * The default request timeout to use if {@link #REQUEST_TIMEOUT} isn't set. 212 */ 213 public static final int DEFAULT_REQUEST_TIMEOUT = 1800 * 1000; 214 215 /** 216 * The request headers to use for HTTP-based repository connectors. The headers are specified using a 217 * {@code Map<String, String>}, mapping a header name to its value. Besides this general key, clients may also 218 * specify headers for a specific remote repository by appending the suffix {@code .<repoId>} to this key when 219 * storing the headers map. The repository-specific headers map is supposed to be complete, i.e. is not merged with 220 * the general headers map. 221 * 222 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 223 * @configurationType {@link java.util.Map} 224 * @configurationRepoIdSuffix Yes 225 */ 226 public static final String HTTP_HEADERS = PREFIX_TRANSPORT_HTTP + "headers"; 227 228 /** 229 * The encoding/charset to use when exchanging credentials with HTTP servers. Besides this general key, clients may 230 * also specify the encoding for a specific remote repository by appending the suffix {@code .<repoId>} to this key 231 * when storing the charset name. 232 * 233 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 234 * @configurationType {@link java.lang.String} 235 * @configurationDefaultValue {@link #DEFAULT_HTTP_CREDENTIAL_ENCODING} 236 * @configurationRepoIdSuffix Yes 237 */ 238 public static final String HTTP_CREDENTIAL_ENCODING = PREFIX_TRANSPORT_HTTP + "credentialEncoding"; 239 240 /** 241 * The default encoding/charset to use if {@link #HTTP_CREDENTIAL_ENCODING} isn't set. 242 */ 243 public static final String DEFAULT_HTTP_CREDENTIAL_ENCODING = "ISO-8859-1"; 244 245 /** 246 * The maximum number of times a request to a remote server should be retried in case of an error. 247 * 248 * @since 1.9.6 249 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 250 * @configurationType {@link java.lang.Integer} 251 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_COUNT} 252 * @configurationRepoIdSuffix Yes 253 */ 254 public static final String HTTP_RETRY_HANDLER_COUNT = PREFIX_TRANSPORT_HTTP + "retryHandler.count"; 255 256 /** 257 * The default number of retries to use if {@link #HTTP_RETRY_HANDLER_COUNT} isn't set. 258 * 259 * @since 1.9.6 260 */ 261 public static final int DEFAULT_HTTP_RETRY_HANDLER_COUNT = 3; 262 263 /** 264 * The initial retry interval in millis of request to a remote server should be waited in case of 265 * "too many requests" (HTTP codes 429 and 503). Accepts long as milliseconds. This value is used if remote server 266 * does not use {@code Retry-After} header, in which case Server value is obeyed. 267 * 268 * @since 1.9.16 269 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 270 * @configurationType {@link java.lang.Long} 271 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL} 272 * @configurationRepoIdSuffix Yes 273 */ 274 public static final String HTTP_RETRY_HANDLER_INTERVAL = PREFIX_TRANSPORT_HTTP + "retryHandler.interval"; 275 276 /** 277 * The default initial retry interval to use if {@link #HTTP_RETRY_HANDLER_INTERVAL} isn't set. 278 * Default value 5000ms. 279 * 280 * @since 1.9.16 281 */ 282 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL = 5000L; 283 284 /** 285 * The maximum retry interval in millis of request to a remote server above which the request should be aborted 286 * instead. In theory, a malicious server could tell Maven "come back after 100 years" that would stall the build 287 * for some. Using this parameter Maven will fail the request instead, if interval is above this value. 288 * 289 * @since 1.9.16 290 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 291 * @configurationType {@link java.lang.Long} 292 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX} 293 * @configurationRepoIdSuffix Yes 294 */ 295 public static final String HTTP_RETRY_HANDLER_INTERVAL_MAX = PREFIX_TRANSPORT_HTTP + "retryHandler.intervalMax"; 296 297 /** 298 * The default retry interval maximum to use if {@link #HTTP_RETRY_HANDLER_INTERVAL_MAX} isn't set. 299 * Default value 5 minutes. 300 * 301 * @since 1.9.16 302 */ 303 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX = 300_000L; 304 305 /** 306 * The HTTP codes of remote server responses that should be handled as "too many requests" 307 * (examples: HTTP codes 429 and 503). Accepts comma separated list of HTTP response codes. 308 * 309 * @since 1.9.16 310 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 311 * @configurationType {@link java.lang.String} 312 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE} 313 * @configurationRepoIdSuffix Yes 314 */ 315 public static final String HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE = 316 PREFIX_TRANSPORT_HTTP + "retryHandler.serviceUnavailable"; 317 318 /** 319 * The default HTTP codes of remote server responses that should be handled as "too many requests". 320 * Default value: "429,503". 321 * 322 * @since 1.9.16 323 */ 324 public static final String DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE = "429,503"; 325 326 /** 327 * Should HTTP client use preemptive-authentication for all HTTP verbs (works only w/ BASIC). By default, is 328 * disabled, as it is considered less secure. 329 * 330 * @since 1.9.6 331 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 332 * @configurationType {@link java.lang.Boolean} 333 * @configurationDefaultValue {@link #DEFAULT_HTTP_PREEMPTIVE_AUTH} 334 * @configurationRepoIdSuffix Yes 335 */ 336 public static final String HTTP_PREEMPTIVE_AUTH = PREFIX_TRANSPORT_HTTP + "preemptiveAuth"; 337 338 /** 339 * The default value to use if {@link #HTTP_PREEMPTIVE_AUTH} isn't set (false). 340 * 341 * @since 1.9.6 342 */ 343 public static final boolean DEFAULT_HTTP_PREEMPTIVE_AUTH = false; 344 345 /** 346 * Should HTTP client reuse connections (in other words, pool connections) or not? 347 * 348 * @since 1.9.8 349 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 350 * @configurationType {@link java.lang.Boolean} 351 * @configurationDefaultValue {@link #DEFAULT_HTTP_REUSE_CONNECTIONS} 352 * @configurationRepoIdSuffix Yes 353 */ 354 public static final String HTTP_REUSE_CONNECTIONS = PREFIX_TRANSPORT_HTTP + "reuseConnections"; 355 356 /** 357 * The default value to use if {@link #HTTP_REUSE_CONNECTIONS} isn't set (true). 358 * 359 * @since 1.9.8 360 */ 361 public static final boolean DEFAULT_HTTP_REUSE_CONNECTIONS = true; 362 363 /** 364 * Total time to live in seconds for an HTTP connection, after that time, the connection will be dropped 365 * (no matter for how long it was idle). 366 * 367 * @since 1.9.8 368 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 369 * @configurationType {@link java.lang.Integer} 370 * @configurationDefaultValue {@link #DEFAULT_HTTP_CONNECTION_MAX_TTL} 371 * @configurationRepoIdSuffix Yes 372 */ 373 public static final String HTTP_CONNECTION_MAX_TTL = PREFIX_TRANSPORT_HTTP + "connectionMaxTtl"; 374 375 /** 376 * The default value to use if {@link #HTTP_CONNECTION_MAX_TTL} isn't set (300 seconds). 377 * 378 * @since 1.9.8 379 */ 380 public static final int DEFAULT_HTTP_CONNECTION_MAX_TTL = 300; 381 382 /** 383 * The maximum concurrent connections per route HTTP client is allowed to use. 384 * 385 * @since 1.9.8 386 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 387 * @configurationType {@link java.lang.Integer} 388 * @configurationDefaultValue {@link #DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE} 389 * @configurationRepoIdSuffix Yes 390 */ 391 public static final String HTTP_MAX_CONNECTIONS_PER_ROUTE = PREFIX_TRANSPORT_HTTP + "maxConnectionsPerRoute"; 392 393 /** 394 * The default value to use if {@link #HTTP_MAX_CONNECTIONS_PER_ROUTE} isn't set (50 connections). 395 * 396 * @since 1.9.8 397 */ 398 public static final int DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE = 50; 399 400 /** 401 * The local address (interface) to use with HTTP transport. Not all transport supports this option. 402 * 403 * @since 2.0.0 404 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 405 * @configurationType {@link java.lang.String} 406 * @configurationRepoIdSuffix Yes 407 */ 408 public static final String HTTP_LOCAL_ADDRESS = PREFIX_TRANSPORT_HTTP + "localAddress"; 409 410 /** 411 * Boolean flag should the HTTP transport support WebDAV remote. Not all transport support this option. 412 * 413 * @since 2.0.0 (moved out from maven-resolver-transport-http). 414 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 415 * @configurationType {@link java.lang.Boolean} 416 * @configurationDefaultValue {@link #DEFAULT_HTTP_SUPPORT_WEBDAV} 417 * @configurationRepoIdSuffix Yes 418 */ 419 public static final String HTTP_SUPPORT_WEBDAV = PREFIX_TRANSPORT_HTTP + "supportWebDav"; 420 421 /** 422 * Default value to use if {@link #HTTP_SUPPORT_WEBDAV} is not set: {@code false}. 423 * 424 * @since 2.0.0 425 */ 426 public static final boolean DEFAULT_HTTP_SUPPORT_WEBDAV = false; 427 428 /** 429 * Boolean flag should the HTTP transport use preemptive-auth for PUT requests. Not all transport support this 430 * option. 431 * 432 * @since 2.0.0 (moved out from maven-resolver-transport-http). 433 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 434 * @configurationType {@link java.lang.Boolean} 435 * @configurationDefaultValue {@link #DEFAULT_HTTP_PREEMPTIVE_PUT_AUTH} 436 * @configurationRepoIdSuffix Yes 437 */ 438 public static final String HTTP_PREEMPTIVE_PUT_AUTH = PREFIX_TRANSPORT_HTTP + "preemptivePutAuth"; 439 440 /** 441 * Default value if {@link #HTTP_PREEMPTIVE_PUT_AUTH} is not set: {@code true}. 442 * 443 * @since 2.0.0 444 */ 445 public static final boolean DEFAULT_HTTP_PREEMPTIVE_PUT_AUTH = true; 446 447 /** 448 * Boolean flag should the HTTP transport use expect-continue handshake for PUT requests. Not all transport support 449 * this option. This option may be needed for some broken HTTP servers. Default value corresponds to given 450 * transport default one (resolver does not override those), but if configuration IS given, it will replace 451 * given transport own default value. 452 * 453 * @since 1.9.17 454 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 455 * @configurationType {@link java.lang.Boolean} 456 * @configurationRepoIdSuffix Yes 457 */ 458 public static final String HTTP_EXPECT_CONTINUE = PREFIX_TRANSPORT_HTTP + "expectContinue"; 459 460 /** 461 * The mode that sets HTTPS transport "security mode": to ignore any SSL errors (certificate validity checks, 462 * hostname verification). The default value is {@link #HTTPS_SECURITY_MODE_DEFAULT}. 463 * 464 * @see #HTTPS_SECURITY_MODE_DEFAULT 465 * @see #HTTPS_SECURITY_MODE_INSECURE 466 * @since 1.9.6 467 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 468 * @configurationType {@link java.lang.String} 469 * @configurationDefaultValue {@link #HTTPS_SECURITY_MODE_DEFAULT} 470 * @configurationRepoIdSuffix Yes 471 */ 472 public static final String HTTPS_SECURITY_MODE = PREFIX_TRANSPORT_HTTPS + "securityMode"; 473 474 /** 475 * The default HTTPS security mode. 476 * 477 * @since 1.9.6 478 */ 479 public static final String HTTPS_SECURITY_MODE_DEFAULT = "default"; 480 481 /** 482 * The insecure HTTPS security mode (certificate validation, hostname verification are all ignored). 483 * 484 * @since 1.9.6 485 */ 486 public static final String HTTPS_SECURITY_MODE_INSECURE = "insecure"; 487 488 /** 489 * A flag indicating which visitor should be used to "flatten" the dependency graph into list. Default is 490 * same as in older resolver versions "preOrder", while it can accept values like "postOrder" and "levelOrder". 491 * 492 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER 493 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_POSTORDER 494 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER 495 * @since 2.0.0 496 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 497 * @configurationType {@link java.lang.String} 498 * @configurationDefaultValue {@link #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER} 499 * @configurationRepoIdSuffix No 500 */ 501 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR = PREFIX_SYSTEM + "dependencyVisitor"; 502 503 /** 504 * The visitor strategy "preOrder". 505 * 506 * @since 2.0.0 507 */ 508 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER = "preOrder"; 509 510 /** 511 * The visitor strategy "postOrder". This was the only one supported in Resolver 1.x and is hence the 512 * default as well. 513 * 514 * @since 2.0.0 515 */ 516 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_POSTORDER = "postOrder"; 517 518 /** 519 * The visitor strategy "levelOrder". 520 * 521 * @since 2.0.0 522 */ 523 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER = "levelOrder"; 524 525 private ConfigurationProperties() { 526 // hide constructor 527 } 528}