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