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 util related configurations. <em>For internal use only.</em>
86 *
87 * @since 2.0.10
88 */
89 public static final String PREFIX_UTIL = PREFIX_AETHER + "util.";
90
91 /**
92 * Prefix for transport related configurations. <em>For internal use only.</em>
93 *
94 * @since 2.0.0
95 */
96 public static final String PREFIX_TRANSPORT = PREFIX_AETHER + "transport.";
97
98 /**
99 * Prefix for HTTP protocol related configurations. <em>For internal use only.</em>
100 *
101 * @since 2.0.0
102 */
103 public static final String PREFIX_TRANSPORT_HTTP = PREFIX_TRANSPORT + "http.";
104
105 /**
106 * Prefix for HTTPS protocol related configurations. <em>For internal use only.</em>
107 *
108 * @since 2.0.0
109 */
110 public static final String PREFIX_TRANSPORT_HTTPS = PREFIX_TRANSPORT + "https.";
111
112 /**
113 * The prefix for properties that control the priority of pluggable extensions like transporters. For example, for
114 * an extension with the fully qualified class name "org.eclipse.MyExtensionFactory", the configuration properties
115 * "aether.priority.org.eclipse.MyExtensionFactory", "aether.priority.MyExtensionFactory" and
116 * "aether.priority.MyExtension" will be consulted for the priority, in that order (obviously, the last key is only
117 * tried if the class name ends with "Factory"). The corresponding value is a float and the special value
118 * {@link Float#NaN} or "NaN" (case-sensitive) can be used to disable the extension.
119 */
120 public static final String PREFIX_PRIORITY = PREFIX_AETHER + "priority.";
121
122 /**
123 * A flag indicating whether the priorities of pluggable extensions are implicitly given by their iteration order
124 * such that the first extension has the highest priority. If set, an extension's built-in priority as well as any
125 * corresponding {@code aether.priority.*} configuration properties are ignored when searching for a suitable
126 * implementation among the available extensions. This priority mode is meant for cases where the application will
127 * present/inject extensions in the desired search order.
128 *
129 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
130 * @configurationType {@link java.lang.Boolean}
131 * @configurationDefaultValue {@link #DEFAULT_IMPLICIT_PRIORITIES}
132 * @configurationRepoIdSuffix No
133 */
134 public static final String IMPLICIT_PRIORITIES = PREFIX_PRIORITY + "implicit";
135
136 /**
137 * The default extension priority mode if {@link #IMPLICIT_PRIORITIES} isn't set.
138 */
139 public static final boolean DEFAULT_IMPLICIT_PRIORITIES = false;
140
141 /**
142 * A flag indicating whether the created ordered components should be cached in session.
143 *
144 * @since 2.0.0
145 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
146 * @configurationType {@link java.lang.Boolean}
147 * @configurationDefaultValue {@link #DEFAULT_CACHED_PRIORITIES}
148 * @configurationRepoIdSuffix No
149 */
150 public static final String CACHED_PRIORITIES = PREFIX_PRIORITY + "cached";
151
152 /**
153 * The priority to use for a certain extension class. {@code <class>} can either be the fully qualified
154 * name or the simple name of a class. If the class name ends with Factory that suffix could optionally be left out.
155 * This configuration is used by {@code org.eclipse.aether.internal.impl.PrioritizedComponents} internal utility
156 * to sort classes by priority. This is reusable utility (so an extension can make use of it), but by default
157 * in "vanilla" Resolver following classes are sorted:
158 * <ul>
159 * <li>{@code org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory}</li>
160 * <li>{@code org.eclipse.aether.spi.connector.RepositoryConnectorFactory}</li>
161 * <li>{@code org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory}</li>
162 * <li>{@code org.eclipse.aether.spi.connector.transport.TransporterFactory}</li>
163 * <li>{@code org.eclipse.aether.spi.artifact.decorator.ArtifactDecoratorFactory}</li>
164 * <li>{@code org.eclipse.aether.spi.artifact.generator.ArtifactGeneratorFactory}</li>
165 * <li>{@code org.eclipse.aether.impl.MetadataGeneratorFactory}</li>
166 * </ul>
167 *
168 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
169 * @configurationType {@link java.lang.Float}
170 * @configurationRepoIdSuffix No
171 */
172 public static final String CLASS_PRIORITIES = PREFIX_PRIORITY + "<class>";
173
174 /**
175 * The default caching of priority components if {@link #CACHED_PRIORITIES} isn't set. Default value is {@code true}.
176 *
177 * @since 2.0.0
178 */
179 public static final boolean DEFAULT_CACHED_PRIORITIES = true;
180
181 /**
182 * A flag indicating whether interaction with the user is allowed.
183 *
184 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
185 * @configurationType {@link java.lang.Boolean}
186 * @configurationDefaultValue {@link #DEFAULT_INTERACTIVE}
187 * @configurationRepoIdSuffix No
188 */
189 public static final String INTERACTIVE = PREFIX_AETHER + "interactive";
190
191 /**
192 * The default interactive mode if {@link #INTERACTIVE} isn't set.
193 */
194 public static final boolean DEFAULT_INTERACTIVE = false;
195
196 /**
197 * The user agent that repository connectors should report to servers.
198 *
199 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
200 * @configurationType {@link java.lang.String}
201 * @configurationDefaultValue {@link #DEFAULT_USER_AGENT}
202 * @configurationRepoIdSuffix No
203 */
204 public static final String USER_AGENT = PREFIX_TRANSPORT_HTTP + "userAgent";
205
206 /**
207 * The default user agent to use if {@link #USER_AGENT} isn't set.
208 */
209 public static final String DEFAULT_USER_AGENT = "Aether";
210
211 /**
212 * The maximum amount of time (in milliseconds) to wait for a successful connection to a remote server. Non-positive
213 * values indicate no timeout.
214 *
215 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
216 * @configurationType {@link java.lang.Integer}
217 * @configurationDefaultValue {@link #DEFAULT_CONNECT_TIMEOUT}
218 * @configurationRepoIdSuffix Yes
219 */
220 public static final String CONNECT_TIMEOUT = PREFIX_TRANSPORT_HTTP + "connectTimeout";
221
222 /**
223 * The default connect timeout to use if {@link #CONNECT_TIMEOUT} isn't set.
224 */
225 public static final int DEFAULT_CONNECT_TIMEOUT = 30 * 1000;
226
227 /**
228 * The maximum amount of time (in milliseconds) to wait for remaining data to arrive from a remote server. Note that
229 * this timeout does not restrict the overall duration of a request, it only restricts the duration of inactivity
230 * between consecutive data packets. Non-positive values indicate no timeout.
231 *
232 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
233 * @configurationType {@link java.lang.Integer}
234 * @configurationDefaultValue {@link #DEFAULT_REQUEST_TIMEOUT}
235 * @configurationRepoIdSuffix Yes
236 */
237 public static final String REQUEST_TIMEOUT = PREFIX_TRANSPORT_HTTP + "requestTimeout";
238
239 /**
240 * The default request timeout to use if {@link #REQUEST_TIMEOUT} isn't set.
241 */
242 public static final int DEFAULT_REQUEST_TIMEOUT = 1800 * 1000;
243
244 /**
245 * The request headers to use for HTTP-based repository connectors. The headers are specified using a
246 * {@code Map<String, String>}, mapping a header name to its value. Besides this general key, clients may also
247 * specify headers for a specific remote repository by appending the suffix {@code .<repoId>} to this key when
248 * storing the headers map. The repository-specific headers map is supposed to be complete, i.e. is not merged with
249 * the general headers map.
250 *
251 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
252 * @configurationType {@link java.util.Map}
253 * @configurationRepoIdSuffix Yes
254 */
255 public static final String HTTP_HEADERS = PREFIX_TRANSPORT_HTTP + "headers";
256
257 /**
258 * The encoding/charset to use when exchanging credentials with HTTP servers. Besides this general key, clients may
259 * also specify the encoding for a specific remote repository by appending the suffix {@code .<repoId>} to this key
260 * when storing the charset name.
261 *
262 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
263 * @configurationType {@link java.lang.String}
264 * @configurationDefaultValue {@link #DEFAULT_HTTP_CREDENTIAL_ENCODING}
265 * @configurationRepoIdSuffix Yes
266 */
267 public static final String HTTP_CREDENTIAL_ENCODING = PREFIX_TRANSPORT_HTTP + "credentialEncoding";
268
269 /**
270 * The default encoding/charset to use if {@link #HTTP_CREDENTIAL_ENCODING} isn't set.
271 */
272 public static final String DEFAULT_HTTP_CREDENTIAL_ENCODING = "ISO-8859-1";
273
274 /**
275 * The maximum number of times a request to a remote server should be retried in case of an error.
276 *
277 * @since 1.9.6
278 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
279 * @configurationType {@link java.lang.Integer}
280 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_COUNT}
281 * @configurationRepoIdSuffix Yes
282 */
283 public static final String HTTP_RETRY_HANDLER_COUNT = PREFIX_TRANSPORT_HTTP + "retryHandler.count";
284
285 /**
286 * The default number of retries to use if {@link #HTTP_RETRY_HANDLER_COUNT} isn't set.
287 *
288 * @since 1.9.6
289 */
290 public static final int DEFAULT_HTTP_RETRY_HANDLER_COUNT = 3;
291
292 /**
293 * The initial retry interval in millis of request to a remote server should be waited in case of
294 * "too many requests" (HTTP codes 429 and 503). Accepts long as milliseconds. This value is used if remote server
295 * does not use {@code Retry-After} header, in which case Server value is obeyed.
296 *
297 * @since 1.9.16
298 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
299 * @configurationType {@link java.lang.Long}
300 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL}
301 * @configurationRepoIdSuffix Yes
302 */
303 public static final String HTTP_RETRY_HANDLER_INTERVAL = PREFIX_TRANSPORT_HTTP + "retryHandler.interval";
304
305 /**
306 * The default initial retry interval to use if {@link #HTTP_RETRY_HANDLER_INTERVAL} isn't set.
307 * Default value 5000ms.
308 *
309 * @since 1.9.16
310 */
311 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL = 5000L;
312
313 /**
314 * The maximum retry interval in millis of request to a remote server above which the request should be aborted
315 * instead. In theory, a malicious server could tell Maven "come back after 100 years" that would stall the build
316 * for some. Using this parameter Maven will fail the request instead, if interval is above this value.
317 *
318 * @since 1.9.16
319 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
320 * @configurationType {@link java.lang.Long}
321 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX}
322 * @configurationRepoIdSuffix Yes
323 */
324 public static final String HTTP_RETRY_HANDLER_INTERVAL_MAX = PREFIX_TRANSPORT_HTTP + "retryHandler.intervalMax";
325
326 /**
327 * The default retry interval maximum to use if {@link #HTTP_RETRY_HANDLER_INTERVAL_MAX} isn't set.
328 * Default value 5 minutes.
329 *
330 * @since 1.9.16
331 */
332 public static final long DEFAULT_HTTP_RETRY_HANDLER_INTERVAL_MAX = 300_000L;
333
334 /**
335 * The HTTP codes of remote server responses that should be handled as "too many requests"
336 * (examples: HTTP codes 429 and 503). Accepts comma separated list of HTTP response codes.
337 *
338 * @since 1.9.16
339 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
340 * @configurationType {@link java.lang.String}
341 * @configurationDefaultValue {@link #DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE}
342 * @configurationRepoIdSuffix Yes
343 */
344 public static final String HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE =
345 PREFIX_TRANSPORT_HTTP + "retryHandler.serviceUnavailable";
346
347 /**
348 * The default HTTP codes of remote server responses that should be handled as "too many requests".
349 * Default value: "429,503".
350 *
351 * @since 1.9.16
352 */
353 public static final String DEFAULT_HTTP_RETRY_HANDLER_SERVICE_UNAVAILABLE = "429,503";
354
355 /**
356 * Should HTTP client use preemptive-authentication for all HTTP verbs (works only w/ BASIC). By default, is
357 * disabled, as it is considered less secure.
358 *
359 * @since 1.9.6
360 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
361 * @configurationType {@link java.lang.Boolean}
362 * @configurationDefaultValue {@link #DEFAULT_HTTP_PREEMPTIVE_AUTH}
363 * @configurationRepoIdSuffix Yes
364 */
365 public static final String HTTP_PREEMPTIVE_AUTH = PREFIX_TRANSPORT_HTTP + "preemptiveAuth";
366
367 /**
368 * The default value to use if {@link #HTTP_PREEMPTIVE_AUTH} isn't set (false).
369 *
370 * @since 1.9.6
371 */
372 public static final boolean DEFAULT_HTTP_PREEMPTIVE_AUTH = false;
373
374 /**
375 * Should HTTP client reuse connections (in other words, pool connections) or not?
376 *
377 * @since 1.9.8
378 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
379 * @configurationType {@link java.lang.Boolean}
380 * @configurationDefaultValue {@link #DEFAULT_HTTP_REUSE_CONNECTIONS}
381 * @configurationRepoIdSuffix Yes
382 */
383 public static final String HTTP_REUSE_CONNECTIONS = PREFIX_TRANSPORT_HTTP + "reuseConnections";
384
385 /**
386 * The default value to use if {@link #HTTP_REUSE_CONNECTIONS} isn't set (true).
387 *
388 * @since 1.9.8
389 */
390 public static final boolean DEFAULT_HTTP_REUSE_CONNECTIONS = true;
391
392 /**
393 * Total time to live in seconds for an HTTP connection, after that time, the connection will be dropped
394 * (no matter for how long it was idle).
395 *
396 * @since 1.9.8
397 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
398 * @configurationType {@link java.lang.Integer}
399 * @configurationDefaultValue {@link #DEFAULT_HTTP_CONNECTION_MAX_TTL}
400 * @configurationRepoIdSuffix Yes
401 */
402 public static final String HTTP_CONNECTION_MAX_TTL = PREFIX_TRANSPORT_HTTP + "connectionMaxTtl";
403
404 /**
405 * The default value to use if {@link #HTTP_CONNECTION_MAX_TTL} isn't set (300 seconds).
406 *
407 * @since 1.9.8
408 */
409 public static final int DEFAULT_HTTP_CONNECTION_MAX_TTL = 300;
410
411 /**
412 * The maximum concurrent connections per route HTTP client is allowed to use.
413 *
414 * @since 1.9.8
415 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
416 * @configurationType {@link java.lang.Integer}
417 * @configurationDefaultValue {@link #DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE}
418 * @configurationRepoIdSuffix Yes
419 */
420 public static final String HTTP_MAX_CONNECTIONS_PER_ROUTE = PREFIX_TRANSPORT_HTTP + "maxConnectionsPerRoute";
421
422 /**
423 * The default value to use if {@link #HTTP_MAX_CONNECTIONS_PER_ROUTE} isn't set (50 connections).
424 *
425 * @since 1.9.8
426 */
427 public static final int DEFAULT_HTTP_MAX_CONNECTIONS_PER_ROUTE = 50;
428
429 /**
430 * The local address (interface) to use with HTTP transport. Not all transport supports this option.
431 *
432 * @since 2.0.0
433 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
434 * @configurationType {@link java.lang.String}
435 * @configurationRepoIdSuffix Yes
436 */
437 public static final String HTTP_LOCAL_ADDRESS = PREFIX_TRANSPORT_HTTP + "localAddress";
438
439 /**
440 * Boolean flag should the HTTP transport support WebDAV remote. Not all transport support this option.
441 *
442 * @since 2.0.0 (moved out from maven-resolver-transport-http).
443 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
444 * @configurationType {@link java.lang.Boolean}
445 * @configurationDefaultValue {@link #DEFAULT_HTTP_SUPPORT_WEBDAV}
446 * @configurationRepoIdSuffix Yes
447 */
448 public static final String HTTP_SUPPORT_WEBDAV = PREFIX_TRANSPORT_HTTP + "supportWebDav";
449
450 /**
451 * Default value to use if {@link #HTTP_SUPPORT_WEBDAV} is not set: {@code false}.
452 *
453 * @since 2.0.0
454 */
455 public static final boolean DEFAULT_HTTP_SUPPORT_WEBDAV = false;
456
457 /**
458 * Boolean flag should the HTTP transport use preemptive-auth for PUT requests. Not all transport support this
459 * option.
460 *
461 * @since 2.0.0 (moved out from maven-resolver-transport-http).
462 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
463 * @configurationType {@link java.lang.Boolean}
464 * @configurationDefaultValue {@link #DEFAULT_HTTP_PREEMPTIVE_PUT_AUTH}
465 * @configurationRepoIdSuffix Yes
466 */
467 public static final String HTTP_PREEMPTIVE_PUT_AUTH = PREFIX_TRANSPORT_HTTP + "preemptivePutAuth";
468
469 /**
470 * Default value if {@link #HTTP_PREEMPTIVE_PUT_AUTH} is not set: {@code true}.
471 *
472 * @since 2.0.0
473 */
474 public static final boolean DEFAULT_HTTP_PREEMPTIVE_PUT_AUTH = true;
475
476 /**
477 * Boolean flag should the HTTP transport use expect-continue handshake for PUT requests. Not all transport support
478 * this option. This option may be needed for some broken HTTP servers. Default value corresponds to given
479 * transport default one (resolver does not override those), but if configuration IS given, it will replace
480 * given transport own default value.
481 *
482 * @since 1.9.17
483 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
484 * @configurationType {@link java.lang.Boolean}
485 * @configurationRepoIdSuffix Yes
486 */
487 public static final String HTTP_EXPECT_CONTINUE = PREFIX_TRANSPORT_HTTP + "expectContinue";
488
489 /**
490 * The mode that sets HTTPS transport "security mode": to ignore any SSL errors (certificate validity checks,
491 * hostname verification). The default value is {@link #HTTPS_SECURITY_MODE_DEFAULT}.
492 *
493 * @see #HTTPS_SECURITY_MODE_DEFAULT
494 * @see #HTTPS_SECURITY_MODE_INSECURE
495 * @since 1.9.6
496 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
497 * @configurationType {@link java.lang.String}
498 * @configurationDefaultValue {@link #HTTPS_SECURITY_MODE_DEFAULT}
499 * @configurationRepoIdSuffix Yes
500 */
501 public static final String HTTPS_SECURITY_MODE = PREFIX_TRANSPORT_HTTPS + "securityMode";
502
503 /**
504 * The default HTTPS security mode.
505 *
506 * @since 1.9.6
507 */
508 public static final String HTTPS_SECURITY_MODE_DEFAULT = "default";
509
510 /**
511 * The insecure HTTPS security mode (certificate validation, hostname verification are all ignored).
512 *
513 * @since 1.9.6
514 */
515 public static final String HTTPS_SECURITY_MODE_INSECURE = "insecure";
516
517 /**
518 * A flag indicating which visitor should be used to "flatten" the dependency graph into list. In Maven 4
519 * the default is new "levelOrder", while Maven 3 used "preOrder". This property accepts values
520 * "preOrder", "postOrder" and "levelOrder".
521 *
522 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER
523 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_POSTORDER
524 * @see #REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER
525 * @since 2.0.0
526 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
527 * @configurationType {@link java.lang.String}
528 * @configurationDefaultValue {@link #DEFAULT_REPOSITORY_SYSTEM_DEPENDENCY_VISITOR}
529 * @configurationRepoIdSuffix No
530 */
531 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR = PREFIX_SYSTEM + "dependencyVisitor";
532
533 /**
534 * The visitor strategy "preOrder".
535 *
536 * @since 2.0.0
537 */
538 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_PREORDER = "preOrder";
539
540 /**
541 * The visitor strategy "postOrder". This was the only one supported in Resolver 1.x and is hence the
542 * default as well.
543 *
544 * @since 2.0.0
545 */
546 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_POSTORDER = "postOrder";
547
548 /**
549 * The visitor strategy "levelOrder".
550 *
551 * @since 2.0.0
552 */
553 public static final String REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER = "levelOrder";
554
555 /**
556 * The default visitor strategy.
557 *
558 * @since 2.0.12
559 */
560 public static final String DEFAULT_REPOSITORY_SYSTEM_DEPENDENCY_VISITOR =
561 REPOSITORY_SYSTEM_DEPENDENCY_VISITOR_LEVELORDER;
562
563 /**
564 * A flag indicating whether version scheme cache statistics should be printed on JVM shutdown.
565 * This is useful for analyzing cache performance and effectiveness in development and testing scenarios.
566 *
567 * @since 2.0.10
568 * @configurationSource {@link RepositorySystemSession#getConfigProperties()}
569 * @configurationType {@link java.lang.Boolean}
570 * @configurationDefaultValue {@link #DEFAULT_VERSION_SCHEME_CACHE_DEBUG}
571 * @configurationRepoIdSuffix No
572 */
573 public static final String VERSION_SCHEME_CACHE_DEBUG = PREFIX_UTIL + "versionScheme.cacheDebug";
574
575 /**
576 * The default value for version scheme cache debug if {@link #VERSION_SCHEME_CACHE_DEBUG} isn't set.
577 *
578 * @since 2.0.10
579 */
580 public static final boolean DEFAULT_VERSION_SCHEME_CACHE_DEBUG = false;
581
582 private ConfigurationProperties() {
583 // hide constructor
584 }
585 }