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