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 /** 29 * Prefix for all configurations. <em>For internal use only.</em> 30 * 31 * @since 2.0.0 32 */ 33 public static final String PREFIX_AETHER = "aether."; 34 35 /** 36 * Prefix for repository system related configurations. <em>For internal use only.</em> 37 * 38 * @since 2.0.0 39 */ 40 public static final String PREFIX_SYSTEM = PREFIX_AETHER + "system."; 41 42 /** 43 * Prefix for sync context related configurations. <em>For internal use only.</em> 44 * 45 * @since 2.0.0 46 */ 47 public static final String PREFIX_SYNC_CONTEXT = PREFIX_AETHER + "syncContext."; 48 49 /** 50 * Prefix for connector related configurations. <em>For internal use only.</em> 51 * 52 * @since 2.0.0 53 */ 54 public static final String PREFIX_CONNECTOR = PREFIX_AETHER + "connector."; 55 56 /** 57 * Prefix for layout related configurations. <em>For internal use only.</em> 58 * 59 * @since 2.0.0 60 */ 61 public static final String PREFIX_LAYOUT = PREFIX_AETHER + "layout."; 62 63 /** 64 * Prefix for checksum related configurations. <em>For internal use only.</em> 65 * 66 * @since 2.0.0 67 */ 68 public static final String PREFIX_CHECKSUMS = PREFIX_AETHER + "checksums."; 69 70 /** 71 * Prefix for local repository manager related configurations. <em>For internal use only.</em> 72 * 73 * @since 2.0.0 74 */ 75 public static final String PREFIX_LRM = PREFIX_AETHER + "lrm."; 76 77 /** 78 * Prefix for generator related configurations. <em>For internal use only.</em> 79 * 80 * @since 2.0.0 81 */ 82 public static final String PREFIX_GENERATOR = PREFIX_AETHER + "generator."; 83 84 /** 85 * Prefix for transport related configurations. <em>For internal use only.</em> 86 * 87 * @since 2.0.0 88 */ 89 public static final String PREFIX_TRANSPORT = PREFIX_AETHER + "transport."; 90 91 /** 92 * Prefix for HTTP protocol related configurations. <em>For internal use only.</em> 93 * 94 * @since 2.0.0 95 */ 96 public static final String PREFIX_TRANSPORT_HTTP = PREFIX_TRANSPORT + "http."; 97 98 /** 99 * 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 priority to use for a certain extension class. {@code <class>} can either be the fully qualified 147 * name or the simple name of a class. If the class name ends with Factory that suffix could optionally be left out. 148 * This configuration is used by {@code org.eclipse.aether.internal.impl.PrioritizedComponents} internal utility 149 * to sort classes by priority. This is reusable utility (so an extension can make use of it), but by default 150 * in "vanilla" Resolver following classes are sorted: 151 * <ul> 152 * <li>{@code org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory}</li> 153 * <li>{@code org.eclipse.aether.spi.connector.RepositoryConnectorFactory}</li> 154 * <li>{@code org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory}</li> 155 * <li>{@code org.eclipse.aether.spi.connector.transport.TransporterFactory}</li> 156 * <li>{@code org.eclipse.aether.spi.artifact.decorator.ArtifactDecoratorFactory}</li> 157 * <li>{@code org.eclipse.aether.spi.artifact.generator.ArtifactGeneratorFactory}</li> 158 * <li>{@code org.eclipse.aether.impl.MetadataGeneratorFactory}</li> 159 * </ul> 160 * 161 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 162 * @configurationType {@link java.lang.Float} 163 * @configurationRepoIdSuffix No 164 */ 165 public static final String CLASS_PRIORITIES = PREFIX_PRIORITY + "<class>"; 166 167 /** 168 * The default caching of priority components if {@link #CACHED_PRIORITIES} isn't set. Default value is {@code true}. 169 * 170 * @since 2.0.0 171 */ 172 public static final boolean DEFAULT_CACHED_PRIORITIES = true; 173 174 /** 175 * A flag indicating whether interaction with the user is allowed. 176 * 177 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 178 * @configurationType {@link java.lang.Boolean} 179 * @configurationDefaultValue {@link #DEFAULT_INTERACTIVE} 180 * @configurationRepoIdSuffix No 181 */ 182 public static final String INTERACTIVE = PREFIX_AETHER + "interactive"; 183 184 /** 185 * The default interactive mode if {@link #INTERACTIVE} isn't set. 186 */ 187 public static final boolean DEFAULT_INTERACTIVE = false; 188 189 /** 190 * The user agent that repository connectors should report to servers. 191 * 192 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 193 * @configurationType {@link java.lang.String} 194 * @configurationDefaultValue {@link #DEFAULT_USER_AGENT} 195 * @configurationRepoIdSuffix No 196 */ 197 public static final String USER_AGENT = PREFIX_TRANSPORT_HTTP + "userAgent"; 198 199 /** 200 * The default user agent to use if {@link #USER_AGENT} isn't set. 201 */ 202 public static final String DEFAULT_USER_AGENT = "Aether"; 203 204 /** 205 * The maximum amount of time (in milliseconds) to wait for a successful connection to a remote server. Non-positive 206 * values indicate no timeout. 207 * 208 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 209 * @configurationType {@link java.lang.Integer} 210 * @configurationDefaultValue {@link #DEFAULT_CONNECT_TIMEOUT} 211 * @configurationRepoIdSuffix Yes 212 */ 213 public static final String CONNECT_TIMEOUT = PREFIX_TRANSPORT_HTTP + "connectTimeout"; 214 215 /** 216 * The default connect timeout to use if {@link #CONNECT_TIMEOUT} isn't set. 217 */ 218 public static final int DEFAULT_CONNECT_TIMEOUT = 30 * 1000; 219 220 /** 221 * The maximum amount of time (in milliseconds) to wait for remaining data to arrive from a remote server. Note that 222 * this timeout does not restrict the overall duration of a request, it only restricts the duration of inactivity 223 * between consecutive data packets. Non-positive values indicate no timeout. 224 * 225 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 226 * @configurationType {@link java.lang.Integer} 227 * @configurationDefaultValue {@link #DEFAULT_REQUEST_TIMEOUT} 228 * @configurationRepoIdSuffix Yes 229 */ 230 public static final String REQUEST_TIMEOUT = PREFIX_TRANSPORT_HTTP + "requestTimeout"; 231 232 /** 233 * The default request timeout to use if {@link #REQUEST_TIMEOUT} isn't set. 234 */ 235 public static final int DEFAULT_REQUEST_TIMEOUT = 1800 * 1000; 236 237 /** 238 * The request headers to use for HTTP-based repository connectors. The headers are specified using a 239 * {@code Map<String, String>}, mapping a header name to its value. Besides this general key, clients may also 240 * specify headers for a specific remote repository by appending the suffix {@code .<repoId>} to this key when 241 * storing the headers map. The repository-specific headers map is supposed to be complete, i.e. is not merged with 242 * the general headers map. 243 * 244 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 245 * @configurationType {@link java.util.Map} 246 * @configurationRepoIdSuffix Yes 247 */ 248 public static final String HTTP_HEADERS = PREFIX_TRANSPORT_HTTP + "headers"; 249 250 /** 251 * The encoding/charset to use when exchanging credentials with HTTP servers. Besides this general key, clients may 252 * also specify the encoding for a specific remote repository by appending the suffix {@code .<repoId>} to this key 253 * when storing the charset name. 254 * 255 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 256 * @configurationType {@link java.lang.String} 257 * @configurationDefaultValue {@link #DEFAULT_HTTP_CREDENTIAL_ENCODING} 258 * @configurationRepoIdSuffix Yes 259 */ 260 public static final String HTTP_CREDENTIAL_ENCODING = PREFIX_TRANSPORT_HTTP + "credentialEncoding"; 261 262 /** 263 * The default encoding/charset to use if {@link #HTTP_CREDENTIAL_ENCODING} isn't set. 264 */ 265 public static final String DEFAULT_HTTP_CREDENTIAL_ENCODING = "ISO-8859-1"; 266 267 /** 268 * The maximum number of times a request to a remote server should be retried in case of an error. 269 * 270 * @since 1.9.6 271 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 272 * @configurationType {@link java.lang.Integer} 273 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_COUNT} 274 * @configurationRepoIdSuffix Yes 275 */ 276 public static final String HTTP_RETRY_HANDLER_COUNT = PREFIX_TRANSPORT_HTTP + "retryHandler.count"; 277 278 /** 279 * The default number of retries to use if {@link #HTTP_RETRY_HANDLER_COUNT} isn't set. 280 * 281 * @since 1.9.6 282 */ 283 public static final int DEFAULT_HTTP_RETRY_HANDLER_COUNT = 3; 284 285 /** 286 * The initial retry interval in millis of request to a remote server should be waited in case of 287 * "too many requests" (HTTP codes 429 and 503). Accepts long as milliseconds. This value is used if remote server 288 * does not use {@code Retry-After} header, in which case Server value is obeyed. 289 * 290 * @since 1.9.16 291 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 292 * @configurationType {@link java.lang.Long} 293 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL} 294 * @configurationRepoIdSuffix Yes 295 */ 296 public static final String HTTP_RETRY_HANDLER_INTERVAL = PREFIX_TRANSPORT_HTTP + "retryHandler.interval"; 297 298 /** 299 * The default initial retry interval to use if {@link #HTTP_RETRY_HANDLER_INTERVAL} isn't set. 300 * Default value 5000ms. 301 * 302 * @since 1.9.16 303 */ 304 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL = 5000L; 305 306 /** 307 * The maximum retry interval in millis of request to a remote server above which the request should be aborted 308 * instead. In theory, a malicious server could tell Maven "come back after 100 years" that would stall the build 309 * for some. Using this parameter Maven will fail the request instead, if interval is above this value. 310 * 311 * @since 1.9.16 312 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 313 * @configurationType {@link java.lang.Long} 314 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX} 315 * @configurationRepoIdSuffix Yes 316 */ 317 public static final String HTTP_RETRY_HANDLER_INTERVAL_MAX = PREFIX_TRANSPORT_HTTP + "retryHandler.intervalMax"; 318 319 /** 320 * The default retry interval maximum to use if {@link #HTTP_RETRY_HANDLER_INTERVAL_MAX} isn't set. 321 * Default value 5 minutes. 322 * 323 * @since 1.9.16 324 */ 325 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX = 300_000L; 326 327 /** 328 * The HTTP codes of remote server responses that should be handled as "too many requests" 329 * (examples: HTTP codes 429 and 503). Accepts comma separated list of HTTP response codes. 330 * 331 * @since 1.9.16 332 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 333 * @configurationType {@link java.lang.String} 334 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE} 335 * @configurationRepoIdSuffix Yes 336 */ 337 public static final String HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE = 338 PREFIX_TRANSPORT_HTTP + "retryHandler.serviceUnavailable"; 339 340 /** 341 * The default HTTP codes of remote server responses that should be handled as "too many requests". 342 * Default value: "429,503". 343 * 344 * @since 1.9.16 345 */ 346 public static final String DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE = "429,503"; 347 348 /** 349 * Should HTTP client use preemptive-authentication for all HTTP verbs (works only w/ BASIC). By default, is 350 * disabled, as it is considered less secure. 351 * 352 * @since 1.9.6 353 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 354 * @configurationType {@link java.lang.Boolean} 355 * @configurationDefaultValue {@link #DEFAULT_HTTP_PREEMPTIVE_AUTH} 356 * @configurationRepoIdSuffix Yes 357 */ 358 public static final String HTTP_PREEMPTIVE_AUTH = PREFIX_TRANSPORT_HTTP + "preemptiveAuth"; 359 360 /** 361 * The default value to use if {@link #HTTP_PREEMPTIVE_AUTH} isn't set (false). 362 * 363 * @since 1.9.6 364 */ 365 public static final boolean DEFAULT_HTTP_PREEMPTIVE_AUTH = false; 366 367 /** 368 * Should HTTP client reuse connections (in other words, pool connections) or not? 369 * 370 * @since 1.9.8 371 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 372 * @configurationType {@link java.lang.Boolean} 373 * @configurationDefaultValue {@link #DEFAULT_HTTP_REUSE_CONNECTIONS} 374 * @configurationRepoIdSuffix Yes 375 */ 376 public static final String HTTP_REUSE_CONNECTIONS = PREFIX_TRANSPORT_HTTP + "reuseConnections"; 377 378 /** 379 * The default value to use if {@link #HTTP_REUSE_CONNECTIONS} isn't set (true). 380 * 381 * @since 1.9.8 382 */ 383 public static final boolean DEFAULT_HTTP_REUSE_CONNECTIONS = true; 384 385 /** 386 * Total time to live in seconds for an HTTP connection, after that time, the connection will be dropped 387 * (no matter for how long it was idle). 388 * 389 * @since 1.9.8 390 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 391 * @configurationType {@link java.lang.Integer} 392 * @configurationDefaultValue {@link #DEFAULT_HTTP_CONNECTION_MAX_TTL} 393 * @configurationRepoIdSuffix Yes 394 */ 395 public static final String HTTP_CONNECTION_MAX_TTL = PREFIX_TRANSPORT_HTTP + "connectionMaxTtl"; 396 397 /** 398 * The default value to use if {@link #HTTP_CONNECTION_MAX_TTL} isn't set (300 seconds). 399 * 400 * @since 1.9.8 401 */ 402 public static final int DEFAULT_HTTP_CONNECTION_MAX_TTL = 300; 403 404 /** 405 * The maximum concurrent connections per route HTTP client is allowed to use. 406 * 407 * @since 1.9.8 408 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 409 * @configurationType {@link java.lang.Integer} 410 * @configurationDefaultValue {@link #DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE} 411 * @configurationRepoIdSuffix Yes 412 */ 413 public static final String HTTP_MAX_CONNECTIONS_PER_ROUTE = PREFIX_TRANSPORT_HTTP + "maxConnectionsPerRoute"; 414 415 /** 416 * The default value to use if {@link #HTTP_MAX_CONNECTIONS_PER_ROUTE} isn't set (50 connections). 417 * 418 * @since 1.9.8 419 */ 420 public static final int DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE = 50; 421 422 /** 423 * The local address (interface) to use with HTTP transport. Not all transport supports this option. 424 * 425 * @since 2.0.0 426 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 427 * @configurationType {@link java.lang.String} 428 * @configurationRepoIdSuffix Yes 429 */ 430 public static final String HTTP_LOCAL_ADDRESS = PREFIX_TRANSPORT_HTTP + "localAddress"; 431 432 /** 433 * Boolean flag should the HTTP transport support WebDAV remote. Not all transport support this option. 434 * 435 * @since 2.0.0 (moved out from maven-resolver-transport-http). 436 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 437 * @configurationType {@link java.lang.Boolean} 438 * @configurationDefaultValue {@link #DEFAULT_HTTP_SUPPORT_WEBDAV} 439 * @configurationRepoIdSuffix Yes 440 */ 441 public static final String HTTP_SUPPORT_WEBDAV = PREFIX_TRANSPORT_HTTP + "supportWebDav"; 442 443 /** 444 * Default value to use if {@link #HTTP_SUPPORT_WEBDAV} is not set: {@code false}. 445 * 446 * @since 2.0.0 447 */ 448 public static final boolean DEFAULT_HTTP_SUPPORT_WEBDAV = false; 449 450 /** 451 * Boolean flag should the HTTP transport use preemptive-auth for PUT requests. Not all transport support this 452 * option. 453 * 454 * @since 2.0.0 (moved out from maven-resolver-transport-http). 455 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 456 * @configurationType {@link java.lang.Boolean} 457 * @configurationDefaultValue {@link #DEFAULT_HTTP_PREEMPTIVE_PUT_AUTH} 458 * @configurationRepoIdSuffix Yes 459 */ 460 public static final String HTTP_PREEMPTIVE_PUT_AUTH = PREFIX_TRANSPORT_HTTP + "preemptivePutAuth"; 461 462 /** 463 * Default value if {@link #HTTP_PREEMPTIVE_PUT_AUTH} is not set: {@code true}. 464 * 465 * @since 2.0.0 466 */ 467 public static final boolean DEFAULT_HTTP_PREEMPTIVE_PUT_AUTH = true; 468 469 /** 470 * Boolean flag should the HTTP transport use expect-continue handshake for PUT requests. Not all transport support 471 * this option. This option may be needed for some broken HTTP servers. Default value corresponds to given 472 * transport default one (resolver does not override those), but if configuration IS given, it will replace 473 * given transport own default value. 474 * 475 * @since 1.9.17 476 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 477 * @configurationType {@link java.lang.Boolean} 478 * @configurationRepoIdSuffix Yes 479 */ 480 public static final String HTTP_EXPECT_CONTINUE = PREFIX_TRANSPORT_HTTP + "expectContinue"; 481 482 /** 483 * The mode that sets HTTPS transport "security mode": to ignore any SSL errors (certificate validity checks, 484 * hostname verification). The default value is {@link #HTTPS_SECURITY_MODE_DEFAULT}. 485 * 486 * @see #HTTPS_SECURITY_MODE_DEFAULT 487 * @see #HTTPS_SECURITY_MODE_INSECURE 488 * @since 1.9.6 489 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 490 * @configurationType {@link java.lang.String} 491 * @configurationDefaultValue {@link #HTTPS_SECURITY_MODE_DEFAULT} 492 * @configurationRepoIdSuffix Yes 493 */ 494 public static final String HTTPS_SECURITY_MODE = PREFIX_TRANSPORT_HTTPS + "securityMode"; 495 496 /** 497 * The default HTTPS security mode. 498 * 499 * @since 1.9.6 500 */ 501 public static final String HTTPS_SECURITY_MODE_DEFAULT = "default"; 502 503 /** 504 * The insecure HTTPS security mode (certificate validation, hostname verification are all ignored). 505 * 506 * @since 1.9.6 507 */ 508 public static final String HTTPS_SECURITY_MODE_INSECURE = "insecure"; 509 510 /** 511 * A flag indicating which visitor should be used to "flatten" the dependency graph into list. Default is 512 * same as in older resolver versions "preOrder", while it can accept values like "postOrder" and "levelOrder". 513 * 514 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER 515 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_POSTORDER 516 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER 517 * @since 2.0.0 518 * @configurationSource {@link RepositorySystemSession#getConfigProperties()} 519 * @configurationType {@link java.lang.String} 520 * @configurationDefaultValue {@link #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER} 521 * @configurationRepoIdSuffix No 522 */ 523 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR = PREFIX_SYSTEM + "dependencyVisitor"; 524 525 /** 526 * The visitor strategy "preOrder". 527 * 528 * @since 2.0.0 529 */ 530 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER = "preOrder"; 531 532 /** 533 * The visitor strategy "postOrder". This was the only one supported in Resolver 1.x and is hence the 534 * default as well. 535 * 536 * @since 2.0.0 537 */ 538 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_POSTORDER = "postOrder"; 539 540 /** 541 * The visitor strategy "levelOrder". 542 * 543 * @since 2.0.0 544 */ 545 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER = "levelOrder"; 546 547 private ConfigurationProperties() { 548 // hide constructor 549 } 550 }