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