View Javadoc
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 &lt;class&gt;} 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 .&lt;repoId&gt;} 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 .&lt;repoId&gt;} 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 }