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