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 021import java.io.Closeable; 022import java.io.File; 023import java.util.List; 024import java.util.Map; 025import java.util.function.Supplier; 026 027import org.eclipse.aether.artifact.ArtifactTypeRegistry; 028import org.eclipse.aether.collection.DependencyGraphTransformer; 029import org.eclipse.aether.collection.DependencyManager; 030import org.eclipse.aether.collection.DependencySelector; 031import org.eclipse.aether.collection.DependencyTraverser; 032import org.eclipse.aether.collection.VersionFilter; 033import org.eclipse.aether.repository.AuthenticationSelector; 034import org.eclipse.aether.repository.LocalRepository; 035import org.eclipse.aether.repository.LocalRepositoryManager; 036import org.eclipse.aether.repository.MirrorSelector; 037import org.eclipse.aether.repository.ProxySelector; 038import org.eclipse.aether.repository.RemoteRepository; 039import org.eclipse.aether.repository.RepositoryPolicy; 040import org.eclipse.aether.repository.WorkspaceReader; 041import org.eclipse.aether.resolution.ArtifactDescriptorPolicy; 042import org.eclipse.aether.resolution.ResolutionErrorPolicy; 043import org.eclipse.aether.transfer.TransferListener; 044 045/** 046 * Defines settings and components that control the repository system. Once initialized, the session object itself is 047 * supposed to be immutable and hence can safely be shared across an entire application and any concurrent threads 048 * reading it. Components that wish to tweak some aspects of an existing session should use the copy constructor of 049 * {@link DefaultRepositorySystemSession} and its mutators to derive a custom session. 050 * 051 * @noimplement This interface is not intended to be implemented by clients. 052 * @noextend This interface is not intended to be extended by clients. 053 */ 054public interface RepositorySystemSession { 055 056 /** 057 * Immutable session that is closeable, should be handled as a resource. These session instances can be 058 * created with {@link SessionBuilder}. 059 * 060 * @noimplement This interface is not intended to be implemented by clients. 061 * @noextend This interface is not intended to be extended by clients. 062 * 063 * @since 2.0.0 064 */ 065 interface CloseableSession extends RepositorySystemSession, Closeable { 066 /** 067 * Returns the ID of this closeable session instance. Each closeable session has different ID, unique within 068 * repository system they were created with. 069 * 070 * @return The session ID that is never {@code null}. 071 */ 072 String sessionId(); 073 074 /** 075 * Copies this session into a pre-populated builder, effectively making a mutable copy of itself, builder builds 076 * <em>same session</em>. Important: this session <em>remains unchanged</em> upon return of this method but 077 * this session and returned builder created session will have <em>same identity</em>. It is up to client code, 078 * will it close only the original (this) session or new session, or both. Important is, that at least one of 079 * the sessions must be closed, and consequence is that once either one is closed, the other session is closed 080 * as well. 081 * <p> 082 * This pattern should be applied in "filter" like constructs, when code needs to alter the incoming session and 083 * subsequently pass it downstream. 084 */ 085 SessionBuilder copy(); 086 087 /** 088 * Closes the session. The session should be closed by its creator. A closed session should not be used anymore. 089 * This method may be invoked multiple times, but close will act only once (first time). 090 */ 091 @Override 092 void close(); 093 } 094 095 /** 096 * Builder for building {@link CloseableSession} instances. Builder instances can be created with 097 * {@link RepositorySystem#createSessionBuilder()} method. Instances are not thread-safe nor immutable. 098 * <p> 099 * Important: if you set a stateful member on builder (for example {@link SessionData} or {@link RepositoryCache}), 100 * the builder will create session instances using same provided stateful members, that may lead to unexpected side 101 * effects. Solution for these cases is to not reuse builder instances, or, keep reconfiguring it, or ultimately 102 * provide suppliers that create new instance per each call. 103 * 104 * @noimplement This interface is not intended to be implemented by clients. 105 * @noextend This interface is not intended to be extended by clients. 106 * 107 * @since 2.0.0 108 */ 109 interface SessionBuilder { 110 /** 111 * Controls whether the repository system operates in offline mode and avoids/refuses any access to remote 112 * repositories. 113 * 114 * @param offline {@code true} if the repository system is in offline mode, {@code false} otherwise. 115 * @return This session for chaining, never {@code null}. 116 */ 117 SessionBuilder setOffline(boolean offline); 118 119 /** 120 * Controls whether repositories declared in artifact descriptors should be ignored during transitive dependency 121 * collection. If enabled, only the repositories originally provided with the collect request will be considered. 122 * 123 * @param ignoreArtifactDescriptorRepositories {@code true} to ignore additional repositories from artifact 124 * descriptors, {@code false} to merge those with the originally 125 * specified repositories. 126 * @return This session for chaining, never {@code null}. 127 */ 128 SessionBuilder setIgnoreArtifactDescriptorRepositories(boolean ignoreArtifactDescriptorRepositories); 129 130 /** 131 * Sets the policy which controls whether resolutions errors from remote repositories should be cached. 132 * 133 * @param resolutionErrorPolicy The resolution error policy for this session, may be {@code null} if resolution 134 * errors should generally not be cached. 135 * @return This session for chaining, never {@code null}. 136 */ 137 SessionBuilder setResolutionErrorPolicy(ResolutionErrorPolicy resolutionErrorPolicy); 138 139 /** 140 * Sets the policy which controls how errors related to reading artifact descriptors should be handled. 141 * 142 * @param artifactDescriptorPolicy The descriptor error policy for this session, may be {@code null} if descriptor 143 * errors should generally not be tolerated. 144 * @return This session for chaining, never {@code null}. 145 */ 146 SessionBuilder setArtifactDescriptorPolicy(ArtifactDescriptorPolicy artifactDescriptorPolicy); 147 148 /** 149 * Sets the global checksum policy. If set, the global checksum policy overrides the checksum policies of the remote 150 * repositories being used for resolution. 151 * 152 * @param checksumPolicy The global checksum policy, may be {@code null}/empty to apply the per-repository policies. 153 * @return This session for chaining, never {@code null}. 154 * @see RepositoryPolicy#CHECKSUM_POLICY_FAIL 155 * @see RepositoryPolicy#CHECKSUM_POLICY_IGNORE 156 * @see RepositoryPolicy#CHECKSUM_POLICY_WARN 157 */ 158 SessionBuilder setChecksumPolicy(String checksumPolicy); 159 160 /** 161 * Sets the global update policy. If set, the global update policy overrides the update policies of the remote 162 * repositories being used for resolution. 163 * <p> 164 * This method is meant for code that does not want to distinguish between artifact and metadata policies. 165 * Note: applications should either use get/set updatePolicy (this method and 166 * {@link RepositorySystemSession#getUpdatePolicy()}) or also distinguish between artifact and 167 * metadata update policies (and use other methods), but <em>should not mix the two!</em> 168 * 169 * @param updatePolicy The global update policy, may be {@code null}/empty to apply the per-repository policies. 170 * @return This session for chaining, never {@code null}. 171 * @see RepositoryPolicy#UPDATE_POLICY_ALWAYS 172 * @see RepositoryPolicy#UPDATE_POLICY_DAILY 173 * @see RepositoryPolicy#UPDATE_POLICY_NEVER 174 * @see #setArtifactUpdatePolicy(String) 175 * @see #setMetadataUpdatePolicy(String) 176 */ 177 SessionBuilder setUpdatePolicy(String updatePolicy); 178 179 /** 180 * Sets the global artifact update policy. If set, the global update policy overrides the artifact update policies 181 * of the remote repositories being used for resolution. 182 * 183 * @param artifactUpdatePolicy The global update policy, may be {@code null}/empty to apply the per-repository policies. 184 * @return This session for chaining, never {@code null}. 185 * @see RepositoryPolicy#UPDATE_POLICY_ALWAYS 186 * @see RepositoryPolicy#UPDATE_POLICY_DAILY 187 * @see RepositoryPolicy#UPDATE_POLICY_NEVER 188 * @since 2.0.0 189 */ 190 SessionBuilder setArtifactUpdatePolicy(String artifactUpdatePolicy); 191 192 /** 193 * Sets the global metadata update policy. If set, the global update policy overrides the metadata update policies 194 * of the remote repositories being used for resolution. 195 * 196 * @param metadataUpdatePolicy The global update policy, may be {@code null}/empty to apply the per-repository policies. 197 * @return This session for chaining, never {@code null}. 198 * @see RepositoryPolicy#UPDATE_POLICY_ALWAYS 199 * @see RepositoryPolicy#UPDATE_POLICY_DAILY 200 * @see RepositoryPolicy#UPDATE_POLICY_NEVER 201 * @since 2.0.0 202 */ 203 SessionBuilder setMetadataUpdatePolicy(String metadataUpdatePolicy); 204 205 /** 206 * Sets the local repository manager used during this session. <em>Note:</em> Eventually, a valid session must have 207 * a local repository manager set. 208 * 209 * @param localRepositoryManager The local repository manager used during this session, may be {@code null}. 210 * @return This session for chaining, never {@code null}. 211 */ 212 SessionBuilder setLocalRepositoryManager(LocalRepositoryManager localRepositoryManager); 213 214 /** 215 * Sets the workspace reader used during this session. If set, the workspace reader will usually be consulted first 216 * to resolve artifacts. 217 * 218 * @param workspaceReader The workspace reader for this session, may be {@code null} if none. 219 * @return This session for chaining, never {@code null}. 220 */ 221 SessionBuilder setWorkspaceReader(WorkspaceReader workspaceReader); 222 223 /** 224 * Sets the listener being notified of actions in the repository system. 225 * 226 * @param repositoryListener The repository listener, may be {@code null} if none. 227 * @return This session for chaining, never {@code null}. 228 */ 229 SessionBuilder setRepositoryListener(RepositoryListener repositoryListener); 230 231 /** 232 * Sets the listener being notified of uploads/downloads by the repository system. 233 * 234 * @param transferListener The transfer listener, may be {@code null} if none. 235 * @return This session for chaining, never {@code null}. 236 */ 237 SessionBuilder setTransferListener(TransferListener transferListener); 238 239 /** 240 * Sets the system properties to use, e.g. for processing of artifact descriptors. System properties are usually 241 * collected from the runtime environment like {@link System#getProperties()} and environment variables. 242 * <p> 243 * <em>Note:</em> System properties are of type {@code Map<String, String>} and any key-value pair in the input map 244 * that doesn't match this type will be silently ignored. 245 * 246 * @param systemProperties The system properties, may be {@code null} or empty if none. 247 * @return This session for chaining, never {@code null}. 248 */ 249 SessionBuilder setSystemProperties(Map<?, ?> systemProperties); 250 251 /** 252 * Sets the specified system property. 253 * 254 * @param key The property key, must not be {@code null}. 255 * @param value The property value, may be {@code null} to remove/unset the property. 256 * @return This session for chaining, never {@code null}. 257 */ 258 SessionBuilder setSystemProperty(String key, String value); 259 260 /** 261 * Sets the user properties to use, e.g. for processing of artifact descriptors. User properties are similar to 262 * system properties but are set on the discretion of the user and hence are considered of higher priority than 263 * system properties in case of conflicts. 264 * <p> 265 * <em>Note:</em> User properties are of type {@code Map<String, String>} and any key-value pair in the input map 266 * that doesn't match this type will be silently ignored. 267 * 268 * @param userProperties The user properties, may be {@code null} or empty if none. 269 * @return This session for chaining, never {@code null}. 270 */ 271 SessionBuilder setUserProperties(Map<?, ?> userProperties); 272 273 /** 274 * Sets the specified user property. 275 * 276 * @param key The property key, must not be {@code null}. 277 * @param value The property value, may be {@code null} to remove/unset the property. 278 * @return This session for chaining, never {@code null}. 279 */ 280 SessionBuilder setUserProperty(String key, String value); 281 282 /** 283 * Sets the configuration properties used to tweak internal aspects of the repository system (e.g. thread pooling, 284 * connector-specific behavior, etc.). 285 * <p> 286 * <em>Note:</em> Configuration properties are of type {@code Map<String, Object>} and any key-value pair in the 287 * input map that doesn't match this type will be silently ignored. 288 * 289 * @param configProperties The configuration properties, may be {@code null} or empty if none. 290 * @return This session for chaining, never {@code null}. 291 */ 292 SessionBuilder setConfigProperties(Map<?, ?> configProperties); 293 294 /** 295 * Sets the specified configuration property. 296 * 297 * @param key The property key, must not be {@code null}. 298 * @param value The property value, may be {@code null} to remove/unset the property. 299 * @return This session for chaining, never {@code null}. 300 */ 301 SessionBuilder setConfigProperty(String key, Object value); 302 303 /** 304 * Sets the mirror selector to use for repositories discovered in artifact descriptors. Note that this selector is 305 * not used for remote repositories which are passed as request parameters to the repository system, those 306 * repositories are supposed to denote the effective repositories. 307 * 308 * @param mirrorSelector The mirror selector to use, may be {@code null}. 309 * @return This session for chaining, never {@code null}. 310 */ 311 SessionBuilder setMirrorSelector(MirrorSelector mirrorSelector); 312 313 /** 314 * Sets the proxy selector to use for repositories discovered in artifact descriptors. Note that this selector is 315 * not used for remote repositories which are passed as request parameters to the repository system, those 316 * repositories are supposed to have their proxy (if any) already set. 317 * 318 * @param proxySelector The proxy selector to use, may be {@code null}. 319 * @return This session for chaining, never {@code null}. 320 * @see RemoteRepository#getProxy() 321 */ 322 SessionBuilder setProxySelector(ProxySelector proxySelector); 323 324 /** 325 * Sets the authentication selector to use for repositories discovered in artifact descriptors. Note that this 326 * selector is not used for remote repositories which are passed as request parameters to the repository system, 327 * those repositories are supposed to have their authentication (if any) already set. 328 * 329 * @param authenticationSelector The authentication selector to use, may be {@code null}. 330 * @return This session for chaining, never {@code null}. 331 * @see RemoteRepository#getAuthentication() 332 */ 333 SessionBuilder setAuthenticationSelector(AuthenticationSelector authenticationSelector); 334 335 /** 336 * Sets the registry of artifact types recognized by this session. 337 * 338 * @param artifactTypeRegistry The artifact type registry, may be {@code null}. 339 * @return This session for chaining, never {@code null}. 340 */ 341 SessionBuilder setArtifactTypeRegistry(ArtifactTypeRegistry artifactTypeRegistry); 342 343 /** 344 * Sets the dependency traverser to use for building dependency graphs. 345 * 346 * @param dependencyTraverser The dependency traverser to use for building dependency graphs, may be {@code null}. 347 * @return This session for chaining, never {@code null}. 348 */ 349 SessionBuilder setDependencyTraverser(DependencyTraverser dependencyTraverser); 350 351 /** 352 * Sets the dependency manager to use for building dependency graphs. 353 * 354 * @param dependencyManager The dependency manager to use for building dependency graphs, may be {@code null}. 355 * @return This session for chaining, never {@code null}. 356 */ 357 SessionBuilder setDependencyManager(DependencyManager dependencyManager); 358 359 /** 360 * Sets the dependency selector to use for building dependency graphs. 361 * 362 * @param dependencySelector The dependency selector to use for building dependency graphs, may be {@code null}. 363 * @return This session for chaining, never {@code null}. 364 */ 365 SessionBuilder setDependencySelector(DependencySelector dependencySelector); 366 367 /** 368 * Sets the version filter to use for building dependency graphs. 369 * 370 * @param versionFilter The version filter to use for building dependency graphs, may be {@code null} to not filter 371 * versions. 372 * @return This session for chaining, never {@code null}. 373 */ 374 SessionBuilder setVersionFilter(VersionFilter versionFilter); 375 376 /** 377 * Sets the dependency graph transformer to use for building dependency graphs. 378 * 379 * @param dependencyGraphTransformer The dependency graph transformer to use for building dependency graphs, may be 380 * {@code null}. 381 * @return This session for chaining, never {@code null}. 382 */ 383 SessionBuilder setDependencyGraphTransformer(DependencyGraphTransformer dependencyGraphTransformer); 384 385 /** 386 * Sets the custom data associated with this session. 387 * 388 * @param data The session data, may be {@code null}. 389 * @return This session for chaining, never {@code null}. 390 */ 391 SessionBuilder setData(SessionData data); 392 393 /** 394 * Sets the custom session data supplier associated with this session. 395 * 396 * @param dataSupplier The session data supplier, may not be {@code null}. 397 * @return This session for chaining, never {@code null}. 398 */ 399 SessionBuilder setSessionDataSupplier(Supplier<SessionData> dataSupplier); 400 401 /** 402 * Sets the cache the repository system may use to save data for future reuse during the session. 403 * 404 * @param cache The repository cache, may be {@code null} if none. 405 * @return This session for chaining, never {@code null}. 406 */ 407 SessionBuilder setCache(RepositoryCache cache); 408 409 /** 410 * Sets the cache supplier for the repository system may use to save data for future reuse during the session. 411 * 412 * @param cacheSupplier The repository cache supplier, may not be {@code null}. 413 * @return This session for chaining, never {@code null}. 414 */ 415 SessionBuilder setRepositoryCacheSupplier(Supplier<RepositoryCache> cacheSupplier); 416 417 /** 418 * Shortcut method to set up local repository manager directly onto builder. There must be at least one non-null 419 * {@link File} passed in this method. In case multiple files, session builder will use chained local repository 420 * manager. 421 * 422 * @param baseDirectories The local repository base directories. 423 * @return This session for chaining, never {@code null}. 424 * @see #withLocalRepositories(LocalRepository...) 425 */ 426 SessionBuilder withLocalRepositoryBaseDirectories(File... baseDirectories); 427 428 /** 429 * Shortcut method to set up local repository manager directly onto builder. There must be at least one non-null 430 * {@link File} present in passed in list. In case multiple files, session builder will use chained local 431 * repository manager. 432 * 433 * @param baseDirectories The local repository base directories. 434 * @return This session for chaining, never {@code null}. 435 * @see #withLocalRepositories(List) 436 */ 437 SessionBuilder withLocalRepositoryBaseDirectories(List<File> baseDirectories); 438 439 /** 440 * Shortcut method to set up local repository manager directly onto builder. There must be at least one non-null 441 * {@link LocalRepository} passed in this method. In case multiple local repositories, session builder will 442 * use chained local repository manager. 443 * 444 * @param localRepositories The local repositories. 445 * @return This session for chaining, never {@code null}. 446 */ 447 SessionBuilder withLocalRepositories(LocalRepository... localRepositories); 448 449 /** 450 * Shortcut method to set up local repository manager directly onto builder. There must be at least one non-null 451 * {@link LocalRepository} present in passed in list. In case multiple local repositories, session builder will 452 * use chained local repository manager. 453 * 454 * @param localRepositories The local repositories. 455 * @return This session for chaining, never {@code null}. 456 */ 457 SessionBuilder withLocalRepositories(List<LocalRepository> localRepositories); 458 459 /** 460 * Shortcut method to shallow-copy passed in session into current builder. 461 * 462 * @param session The session to shallow-copy from. 463 * @return This session for chaining, never {@code null}. 464 */ 465 SessionBuilder withRepositorySystemSession(RepositorySystemSession session); 466 467 /** 468 * Creates a session instance. 469 */ 470 CloseableSession build(); 471 } 472 473 /** 474 * Indicates whether the repository system operates in offline mode and avoids/refuses any access to remote 475 * repositories. 476 * 477 * @return {@code true} if the repository system is in offline mode, {@code false} otherwise. 478 */ 479 boolean isOffline(); 480 481 /** 482 * Indicates whether repositories declared in artifact descriptors should be ignored during transitive dependency 483 * collection. If enabled, only the repositories originally provided with the collect request will be considered. 484 * 485 * @return {@code true} if additional repositories from artifact descriptors are ignored, {@code false} to merge 486 * those with the originally specified repositories. 487 */ 488 boolean isIgnoreArtifactDescriptorRepositories(); 489 490 /** 491 * Gets the policy which controls whether resolutions errors from remote repositories should be cached. 492 * 493 * @return The resolution error policy for this session or {@code null} if resolution errors should generally not be 494 * cached. 495 */ 496 ResolutionErrorPolicy getResolutionErrorPolicy(); 497 498 /** 499 * Gets the policy which controls how errors related to reading artifact descriptors should be handled. 500 * 501 * @return The descriptor error policy for this session or {@code null} if descriptor errors should generally not be 502 * tolerated. 503 */ 504 ArtifactDescriptorPolicy getArtifactDescriptorPolicy(); 505 506 /** 507 * Gets the global checksum policy. If set, the global checksum policy overrides the checksum policies of the remote 508 * repositories being used for resolution. 509 * 510 * @return The global checksum policy or {@code null}/empty if not set and the per-repository policies apply. 511 * @see RepositoryPolicy#CHECKSUM_POLICY_FAIL 512 * @see RepositoryPolicy#CHECKSUM_POLICY_IGNORE 513 * @see RepositoryPolicy#CHECKSUM_POLICY_WARN 514 */ 515 String getChecksumPolicy(); 516 517 /** 518 * Gets the global update policy, or {@code null} if not set. 519 * <p> 520 * This method is meant for code that does not want to distinguish between artifact and metadata policies. 521 * Note: applications should either use get/set updatePolicy (this method and 522 * {@link DefaultRepositorySystemSession#setUpdatePolicy(String)}) or also distinguish between artifact and 523 * metadata update policies (and use other methods), but <em>should not mix the two!</em> 524 * 525 * @see #getArtifactUpdatePolicy() 526 * @see #getMetadataUpdatePolicy() 527 */ 528 String getUpdatePolicy(); 529 530 /** 531 * Gets the global artifact update policy. If set, the global update policy overrides the update policies of the 532 * remote repositories being used for resolution. 533 * 534 * @return The global update policy or {@code null}/empty if not set and the per-repository policies apply. 535 * @see RepositoryPolicy#UPDATE_POLICY_ALWAYS 536 * @see RepositoryPolicy#UPDATE_POLICY_DAILY 537 * @see RepositoryPolicy#UPDATE_POLICY_NEVER 538 * @since 2.0.0 539 */ 540 String getArtifactUpdatePolicy(); 541 542 /** 543 * Gets the global metadata update policy. If set, the global update policy overrides the update policies of the remote 544 * repositories being used for resolution. 545 * 546 * @return The global update policy or {@code null}/empty if not set and the per-repository policies apply. 547 * @see RepositoryPolicy#UPDATE_POLICY_ALWAYS 548 * @see RepositoryPolicy#UPDATE_POLICY_DAILY 549 * @see RepositoryPolicy#UPDATE_POLICY_NEVER 550 * @since 2.0.0 551 */ 552 String getMetadataUpdatePolicy(); 553 554 /** 555 * Gets the local repository used during this session. This is a convenience method for 556 * {@link LocalRepositoryManager#getRepository()}. 557 * 558 * @return The local repository being during this session, never {@code null}. 559 */ 560 LocalRepository getLocalRepository(); 561 562 /** 563 * Gets the local repository manager used during this session. 564 * 565 * @return The local repository manager used during this session, never {@code null}. 566 */ 567 LocalRepositoryManager getLocalRepositoryManager(); 568 569 /** 570 * Gets the workspace reader used during this session. If set, the workspace reader will usually be consulted first 571 * to resolve artifacts. 572 * 573 * @return The workspace reader for this session or {@code null} if none. 574 */ 575 WorkspaceReader getWorkspaceReader(); 576 577 /** 578 * Gets the listener being notified of actions in the repository system. 579 * 580 * @return The repository listener or {@code null} if none. 581 */ 582 RepositoryListener getRepositoryListener(); 583 584 /** 585 * Gets the listener being notified of uploads/downloads by the repository system. 586 * 587 * @return The transfer listener or {@code null} if none. 588 */ 589 TransferListener getTransferListener(); 590 591 /** 592 * Gets the system properties to use, e.g. for processing of artifact descriptors. System properties are usually 593 * collected from the runtime environment like {@link System#getProperties()} and environment variables. 594 * 595 * @return The (read-only) system properties, never {@code null}. 596 */ 597 Map<String, String> getSystemProperties(); 598 599 /** 600 * Gets the user properties to use, e.g. for processing of artifact descriptors. User properties are similar to 601 * system properties but are set on the discretion of the user and hence are considered of higher priority than 602 * system properties. 603 * 604 * @return The (read-only) user properties, never {@code null}. 605 */ 606 Map<String, String> getUserProperties(); 607 608 /** 609 * Gets the configuration properties used to tweak internal aspects of the repository system (e.g. thread pooling, 610 * connector-specific behavior, etc.) 611 * 612 * @return The (read-only) configuration properties, never {@code null}. 613 * @see ConfigurationProperties 614 */ 615 Map<String, Object> getConfigProperties(); 616 617 /** 618 * Gets the mirror selector to use for repositories discovered in artifact descriptors. Note that this selector is 619 * not used for remote repositories which are passed as request parameters to the repository system, those 620 * repositories are supposed to denote the effective repositories. 621 * 622 * @return The mirror selector to use, never {@code null}. 623 * @see RepositorySystem#newResolutionRepositories(RepositorySystemSession, java.util.List) 624 */ 625 MirrorSelector getMirrorSelector(); 626 627 /** 628 * Gets the proxy selector to use for repositories discovered in artifact descriptors. Note that this selector is 629 * not used for remote repositories which are passed as request parameters to the repository system, those 630 * repositories are supposed to have their proxy (if any) already set. 631 * 632 * @return The proxy selector to use, never {@code null}. 633 * @see org.eclipse.aether.repository.RemoteRepository#getProxy() 634 * @see RepositorySystem#newResolutionRepositories(RepositorySystemSession, java.util.List) 635 */ 636 ProxySelector getProxySelector(); 637 638 /** 639 * Gets the authentication selector to use for repositories discovered in artifact descriptors. Note that this 640 * selector is not used for remote repositories which are passed as request parameters to the repository system, 641 * those repositories are supposed to have their authentication (if any) already set. 642 * 643 * @return The authentication selector to use, never {@code null}. 644 * @see org.eclipse.aether.repository.RemoteRepository#getAuthentication() 645 * @see RepositorySystem#newResolutionRepositories(RepositorySystemSession, java.util.List) 646 */ 647 AuthenticationSelector getAuthenticationSelector(); 648 649 /** 650 * Gets the registry of artifact types recognized by this session, for instance when processing artifact 651 * descriptors. 652 * 653 * @return The artifact type registry, never {@code null}. 654 */ 655 ArtifactTypeRegistry getArtifactTypeRegistry(); 656 657 /** 658 * Gets the dependency traverser to use for building dependency graphs. 659 * 660 * @return The dependency traverser to use for building dependency graphs or {@code null} if dependencies are 661 * unconditionally traversed. 662 */ 663 DependencyTraverser getDependencyTraverser(); 664 665 /** 666 * Gets the dependency manager to use for building dependency graphs. 667 * 668 * @return The dependency manager to use for building dependency graphs or {@code null} if dependency management is 669 * not performed. 670 */ 671 DependencyManager getDependencyManager(); 672 673 /** 674 * Gets the dependency selector to use for building dependency graphs. 675 * 676 * @return The dependency selector to use for building dependency graphs or {@code null} if dependencies are 677 * unconditionally included. 678 */ 679 DependencySelector getDependencySelector(); 680 681 /** 682 * Gets the version filter to use for building dependency graphs. 683 * 684 * @return The version filter to use for building dependency graphs or {@code null} if versions aren't filtered. 685 */ 686 VersionFilter getVersionFilter(); 687 688 /** 689 * Gets the dependency graph transformer to use for building dependency graphs. 690 * 691 * @return The dependency graph transformer to use for building dependency graphs or {@code null} if none. 692 */ 693 DependencyGraphTransformer getDependencyGraphTransformer(); 694 695 /** 696 * Gets the custom data associated with this session. 697 * 698 * @return The session data, never {@code null}. 699 */ 700 SessionData getData(); 701 702 /** 703 * Gets the cache the repository system may use to save data for future reuse during the session. 704 * 705 * @return The repository cache or {@code null} if none. 706 */ 707 RepositoryCache getCache(); 708 709 /** 710 * Registers a handler to execute when this session closed. 711 * <p> 712 * Note: Resolver 1.x sessions will not be able to register handlers. Migrate to Resolver 2.x way of handling 713 * sessions to make full use of new features. New features (like HTTP/2 transport) depend on this functionality. 714 * While they will function with Resolver 1.x sessions, they may produce resource leaks. 715 * 716 * @param handler the handler, never {@code null}. 717 * @return {@code true} if handler successfully registered, {@code false} otherwise. 718 * @since 2.0.0 719 */ 720 boolean addOnSessionEndedHandler(Runnable handler); 721}