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.apache.maven.api; 20 21 import java.nio.file.Path; 22 import java.time.Instant; 23 import java.util.Collection; 24 import java.util.List; 25 import java.util.Map; 26 import java.util.NoSuchElementException; 27 import java.util.Optional; 28 29 import org.apache.maven.api.annotations.Experimental; 30 import org.apache.maven.api.annotations.Nonnull; 31 import org.apache.maven.api.annotations.Nullable; 32 import org.apache.maven.api.annotations.ThreadSafe; 33 import org.apache.maven.api.model.Repository; 34 import org.apache.maven.api.services.ArtifactCoordinatesFactory; 35 import org.apache.maven.api.services.DependencyCoordinatesFactory; 36 import org.apache.maven.api.settings.Settings; 37 38 /** 39 * The session to install / deploy / resolve artifacts and dependencies. 40 * 41 * TODO: move the remote repositories in the requests (plugins will need to access this list somehow) 42 * TODO: add request trace so that requests can be linked together and through the resolver 43 * TODO: add a Request interface holding session + parent request 44 * 45 * @since 4.0.0 46 */ 47 @Experimental 48 @ThreadSafe 49 public interface Session { 50 51 /** 52 * Retrieves the settings for the current session. 53 * 54 * @return the settings instance 55 */ 56 @Nonnull 57 Settings getSettings(); 58 59 /** 60 * Retrieves the local repository associated with this session. 61 * 62 * @return the local repository instance 63 */ 64 @Nonnull 65 LocalRepository getLocalRepository(); 66 67 /** 68 * Retrieves a list of remote repositories associated with this session. 69 * 70 * @return a list of remote repositories 71 */ 72 @Nonnull 73 List<RemoteRepository> getRemoteRepositories(); 74 75 /** 76 * Retrieves the session data associated with this session. 77 * 78 * @return the session data, never {@code null} 79 */ 80 @Nonnull 81 SessionData getData(); 82 83 /** 84 * Returns immutable user properties to use for interpolation. The user properties have been configured directly 85 * by the user, e.g. via the {@code -Dkey=value} parameter on the command line. 86 * 87 * @return the user properties, never {@code null} 88 */ 89 @Nonnull 90 Map<String, String> getUserProperties(); 91 92 /** 93 * Returns immutable system properties to use for interpolation. The system properties are collected from the 94 * runtime environment such as {@link System#getProperties()} and environment variables 95 * (prefixed with {@code env.}). 96 * 97 * @return the system properties, never {@code null} 98 */ 99 @Nonnull 100 Map<String, String> getSystemProperties(); 101 102 /** 103 * Each invocation computes a new map of effective properties. To be used in interpolation. 104 * <p> 105 * Effective properties are computed from system, user and optionally project properties, layered with 106 * defined precedence onto each other to achieve proper precedence. Precedence is defined as: 107 * <ul> 108 * <li>System properties (lowest precedence)</li> 109 * <li>Project properties (optional)</li> 110 * <li>User properties (highest precedence)</li> 111 * </ul> 112 * Note: Project properties contains properties injected from profiles, if applicable. Their precedence is 113 * {@code profile > project}, hence active profile property may override project property. 114 * <p> 115 * The caller of this method should decide whether there is a project in scope (hence, a project instance 116 * needs to be passed) or not. 117 * 118 * @param project {@link Project} or {@code null}. 119 * @return the effective properties, never {@code null} 120 */ 121 @Nonnull 122 Map<String, String> getEffectiveProperties(@Nullable Project project); 123 124 /** 125 * Returns the current maven version. 126 * 127 * @return the maven version, never {@code null} 128 */ 129 @Nonnull 130 Version getMavenVersion(); 131 132 /** 133 * Returns the degree of concurrency for the build. 134 * 135 * @return the degree of concurrency 136 */ 137 int getDegreeOfConcurrency(); 138 139 /** 140 * Returns the start time of the session. 141 * 142 * @return the start time as an Instant object, never {@code null} 143 */ 144 @Nonnull 145 Instant getStartTime(); 146 147 /** 148 * Gets the directory of the topmost project being built, usually the current directory or the 149 * directory pointed at by the {@code -f/--file} command line argument. 150 * 151 * @return the directory of the topmost project, never {@code null} 152 * @see Project#isTopProject() 153 * @see #getRootDirectory() 154 */ 155 @Nonnull 156 Path getTopDirectory(); 157 158 /** 159 * Gets the root directory of the session, which is the root directory for the top directory project. 160 * 161 * @return the root directory, never {@code null} 162 * @throws IllegalStateException if the root directory could not be found 163 * @see #getTopDirectory() 164 * @see Project#getRootDirectory() 165 * @see Project#isRootProject() 166 */ 167 @Nonnull 168 Path getRootDirectory(); 169 170 /** 171 * Retrieves a list of projects associated with the session. 172 * 173 * @return a list of projects, never {@code null} 174 */ 175 @Nonnull 176 List<Project> getProjects(); 177 178 /** 179 * Returns the plugin context for mojo being executed and the specified 180 * {@link Project}, never returns {@code null} as if context not present, creates it. 181 * 182 * <strong>Implementation note:</strong> while this method return type is {@link Map}, the 183 * returned map instance implements {@link java.util.concurrent.ConcurrentMap} as well. 184 * 185 * @throws org.apache.maven.api.services.MavenException if not called from the within a mojo execution 186 */ 187 @Nonnull 188 Map<String, Object> getPluginContext(@Nonnull Project project); 189 190 /** 191 * Retrieves the service for the interface 192 * 193 * @throws NoSuchElementException if the service could not be found 194 */ 195 @Nonnull 196 <T extends Service> T getService(@Nonnull Class<T> clazz); 197 198 /** 199 * Creates a derived session using the given local repository. 200 * 201 * @param localRepository the new local repository 202 * @return the derived session 203 * @throws NullPointerException if {@code localRepository} is null 204 */ 205 @Nonnull 206 Session withLocalRepository(@Nonnull LocalRepository localRepository); 207 208 /** 209 * Creates a derived session using the given remote repositories. 210 * 211 * @param repositories the new list of remote repositories 212 * @return the derived session 213 * @throws NullPointerException if {@code repositories} is null 214 */ 215 @Nonnull 216 Session withRemoteRepositories(@Nonnull List<RemoteRepository> repositories); 217 218 /** 219 * Register the given listener which will receive all events. 220 * 221 * @param listener the listener to register 222 * @throws NullPointerException if {@code listener} is null 223 */ 224 void registerListener(@Nonnull Listener listener); 225 226 /** 227 * Unregisters a previously registered listener. 228 * 229 * @param listener the listener to unregister 230 * @throws NullPointerException if {@code listener} is null 231 */ 232 void unregisterListener(@Nonnull Listener listener); 233 234 /** 235 * Returns the list of registered listeners. 236 * 237 * @return an immutable collection of listeners, never {@code null} 238 */ 239 @Nonnull 240 Collection<Listener> getListeners(); 241 242 /** 243 * Shortcut for {@code getService(RepositoryFactory.class).createLocal(...)}. 244 * 245 * @param path location of the local repository to create 246 * @return cache of artifacts downloaded from a remote repository or built locally 247 * 248 * @see org.apache.maven.api.services.RepositoryFactory#createLocal(Path) 249 */ 250 @Nonnull 251 LocalRepository createLocalRepository(@Nonnull Path path); 252 253 /** 254 * Shortcut for {@code getService(RepositoryFactory.class).createRemote(...)}. 255 * 256 * @param id identifier of the remote repository to create 257 * @param url location of the remote repository 258 * @return remote repository that can be used to download or upload artifacts 259 * 260 * @see org.apache.maven.api.services.RepositoryFactory#createRemote(String, String) 261 */ 262 @Nonnull 263 RemoteRepository createRemoteRepository(@Nonnull String id, @Nonnull String url); 264 265 /** 266 * Shortcut for {@code getService(RepositoryFactory.class).createRemote(...)}. 267 * 268 * @param repository information needed for establishing connections with remote repository 269 * @return remote repository that can be used to download or upload artifacts 270 * 271 * @see org.apache.maven.api.services.RepositoryFactory#createRemote(Repository) 272 */ 273 @Nonnull 274 RemoteRepository createRemoteRepository(@Nonnull Repository repository); 275 276 /** 277 * Creates a coordinates out of string that is formatted like: 278 * {@code <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>}. 279 * <p> 280 * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. 281 * 282 * @param coordsString the string having "standard" coordinates. 283 * @return coordinates used to point to the artifact 284 * 285 * @see ArtifactCoordinatesFactory#create(Session, String) 286 */ 287 @Nonnull 288 ArtifactCoordinates createArtifactCoordinates(@Nonnull String coordsString); 289 290 /** 291 * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. 292 * 293 * @param groupId the group identifier, or {@code null} is unspecified 294 * @param artifactId the artifact identifier, or {@code null} is unspecified 295 * @param version the artifact version, or {@code null} is unspecified 296 * @param extension the artifact extension, or {@code null} is unspecified 297 * @return coordinates used to point to the artifact 298 * 299 * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String) 300 */ 301 @Nonnull 302 ArtifactCoordinates createArtifactCoordinates(String groupId, String artifactId, String version, String extension); 303 304 /** 305 * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. 306 * 307 * @param groupId the group identifier, or {@code null} is unspecified 308 * @param artifactId the artifact identifier, or {@code null} is unspecified 309 * @param version the artifact version, or {@code null} is unspecified 310 * @param classifier the artifact classifier, or {@code null} is unspecified 311 * @param extension the artifact extension, or {@code null} is unspecified 312 * @param type the artifact type, or {@code null} is unspecified 313 * @return coordinates used to point to the artifact 314 * 315 * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String, String, String) 316 */ 317 @Nonnull 318 ArtifactCoordinates createArtifactCoordinates( 319 String groupId, String artifactId, String version, String classifier, String extension, String type); 320 321 /** 322 * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. 323 * 324 * @param artifact artifact from which to get coordinates 325 * @return coordinates used to point to the artifact 326 * 327 * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String, String, String) 328 */ 329 @Nonnull 330 ArtifactCoordinates createArtifactCoordinates(@Nonnull Artifact artifact); 331 332 /** 333 * Shortcut for {@code getService(DependencyFactory.class).create(...)}. 334 * 335 * @param coordinates artifact coordinates to get as a dependency coordinates 336 * @return dependency coordinates for the given artifact 337 * 338 * @see DependencyCoordinatesFactory#create(Session, ArtifactCoordinates) 339 */ 340 @Nonnull 341 DependencyCoordinates createDependencyCoordinates(@Nonnull ArtifactCoordinates coordinates); 342 343 /** 344 * Shortcut for {@code getService(DependencyFactory.class).create(...)}. 345 * 346 * @param dependency dependency for which to get the coordinates 347 * @return coordinates for the given dependency 348 * 349 * @see DependencyCoordinatesFactory#create(Session, Dependency) 350 */ 351 @Nonnull 352 DependencyCoordinates createDependencyCoordinates(@Nonnull Dependency dependency); 353 354 /** 355 * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. 356 * 357 * @param groupId the group identifier, or {@code null} is unspecified 358 * @param artifactId the artifact identifier, or {@code null} is unspecified 359 * @param version the artifact version, or {@code null} is unspecified 360 * @param extension the artifact extension, or {@code null} is unspecified 361 * @return artifact with the given coordinates 362 * 363 * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String) 364 */ 365 @Nonnull 366 Artifact createArtifact(String groupId, String artifactId, String version, String extension); 367 368 /** 369 * Shortcut for {@code getService(ArtifactFactory.class).create(...)}. 370 * 371 * @param groupId the group identifier, or {@code null} is unspecified 372 * @param artifactId the artifact identifier, or {@code null} is unspecified 373 * @param version the artifact version, or {@code null} is unspecified 374 * @param classifier the artifact classifier, or {@code null} is unspecified 375 * @param extension the artifact extension, or {@code null} is unspecified 376 * @param type the artifact type, or {@code null} is unspecified 377 * @return artifact with the given coordinates 378 * 379 * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String, String, String) 380 */ 381 @Nonnull 382 Artifact createArtifact( 383 String groupId, String artifactId, String version, String classifier, String extension, String type); 384 385 /** 386 * Shortcut for {@code getService(ArtifactFactory.class).createProduced(...)}. 387 * 388 * @param groupId the group identifier, or {@code null} is unspecified 389 * @param artifactId the artifact identifier, or {@code null} is unspecified 390 * @param version the artifact version, or {@code null} is unspecified 391 * @param extension the artifact extension, or {@code null} is unspecified 392 * @return artifact with the given coordinates 393 * 394 * @see org.apache.maven.api.services.ArtifactFactory#createProduced(Session, String, String, String, String) 395 */ 396 @Nonnull 397 ProducedArtifact createProducedArtifact(String groupId, String artifactId, String version, String extension); 398 399 /** 400 * Shortcut for {@code getService(ArtifactFactory.class).createProduced(...)}. 401 * 402 * @param groupId the group identifier, or {@code null} is unspecified 403 * @param artifactId the artifact identifier, or {@code null} is unspecified 404 * @param version the artifact version, or {@code null} is unspecified 405 * @param classifier the artifact classifier, or {@code null} is unspecified 406 * @param extension the artifact extension, or {@code null} is unspecified 407 * @param type the artifact type, or {@code null} is unspecified 408 * @return artifact with the given coordinates 409 * 410 * @see org.apache.maven.api.services.ArtifactFactory#createProduced(Session, String, String, String, String, String, String) 411 */ 412 @Nonnull 413 ProducedArtifact createProducedArtifact( 414 String groupId, String artifactId, String version, String classifier, String extension, String type); 415 416 /** 417 * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}. 418 * 419 * @param coordinates coordinates of the artifact to resolve 420 * @return requested artifact together with the path to its file 421 * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed 422 * 423 * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection) 424 */ 425 @Nonnull 426 DownloadedArtifact resolveArtifact(@Nonnull ArtifactCoordinates coordinates); 427 428 /** 429 * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}. 430 * 431 * @param coordinates coordinates of all artifacts to resolve 432 * @return requested artifacts together with the paths to their files 433 * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed 434 * 435 * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection) 436 */ 437 @Nonnull 438 Collection<DownloadedArtifact> resolveArtifacts(@Nonnull ArtifactCoordinates... coordinates); 439 440 /** 441 * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}. 442 * 443 * @param coordinates coordinates of all artifacts to resolve 444 * @return requested artifacts together with the paths to their files 445 * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed 446 * 447 * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection) 448 */ 449 @Nonnull 450 Collection<DownloadedArtifact> resolveArtifacts(@Nonnull Collection<? extends ArtifactCoordinates> coordinates); 451 452 /** 453 * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}. 454 * 455 * @param artifact the artifact to resolve 456 * @return requested artifact together with the path to its file 457 * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed 458 * 459 * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection) 460 */ 461 @Nonnull 462 DownloadedArtifact resolveArtifact(@Nonnull Artifact artifact); 463 464 /** 465 * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}. 466 * 467 * @param artifacts all artifacts to resolve 468 * @return requested artifacts together with the paths to their files 469 * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed 470 * 471 * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection) 472 */ 473 @Nonnull 474 Collection<DownloadedArtifact> resolveArtifacts(@Nonnull Artifact... artifacts); 475 476 /** 477 * Shortcut for {@code getService(ArtifactInstaller.class).install(...)}. 478 * 479 * @param artifacts the artifacts to install 480 * @throws org.apache.maven.api.services.ArtifactInstallerException if the artifacts installation failed 481 * 482 * @see org.apache.maven.api.services.ArtifactInstaller#install(Session, Collection) 483 */ 484 void installArtifacts(@Nonnull Artifact... artifacts); 485 486 /** 487 * Shortcut for {@code getService(ArtifactInstaller.class).install(...)}. 488 * 489 * @param artifacts the artifacts to install 490 * @throws org.apache.maven.api.services.ArtifactInstallerException if the artifacts installation failed 491 * 492 * @see org.apache.maven.api.services.ArtifactInstaller#install(Session, Collection) 493 */ 494 void installArtifacts(@Nonnull Collection<Artifact> artifacts); 495 496 /** 497 * Shortcut for {@code getService(ArtifactDeployer.class).deploy(...)}. 498 * 499 * @param repository the repository where to deploy artifacts 500 * @param artifacts the artifacts to deploy 501 * @throws org.apache.maven.api.services.ArtifactDeployerException if the artifacts deployment failed 502 * 503 * @see org.apache.maven.api.services.ArtifactDeployer#deploy(Session, RemoteRepository, Collection) 504 */ 505 void deployArtifact(@Nonnull RemoteRepository repository, @Nonnull Artifact... artifacts); 506 507 /** 508 * Shortcut for {@code getService(ArtifactManager.class).setPath(...)}. 509 * 510 * @param artifact the artifact for which to associate a path 511 * @param path path to associate to the given artifact 512 * 513 * @see org.apache.maven.api.services.ArtifactManager#setPath(ProducedArtifact, Path) 514 */ 515 void setArtifactPath(@Nonnull ProducedArtifact artifact, @Nonnull Path path); 516 517 /** 518 * Shortcut for {@code getService(ArtifactManager.class).getPath(...)}. 519 * 520 * @param artifact the artifact for which to get a path 521 * @return path associated to the given artifact 522 * 523 * @see org.apache.maven.api.services.ArtifactManager#getPath(Artifact) 524 */ 525 @Nonnull 526 Optional<Path> getArtifactPath(@Nonnull Artifact artifact); 527 528 /** 529 * Gets the relative path for a locally installed artifact. Note that the artifact need not actually exist yet at 530 * the returned location, the path merely indicates where the artifact would eventually be stored. 531 * <p> 532 * Shortcut for {@code getService(LocalArtifactManager.class).getPathForLocalArtitact(...)}. 533 * 534 * @param artifact the artifact for which to get a local path 535 * @return local path associated to the given artifact, or {@code null} if none 536 * 537 * @see org.apache.maven.api.services.LocalRepositoryManager#getPathForLocalArtifact(Session, LocalRepository, Artifact) 538 */ 539 Path getPathForLocalArtifact(@Nonnull Artifact artifact); 540 541 /** 542 * Gets the relative path for an artifact cached from a remote repository. 543 * Note that the artifact need not actually exist yet at the returned location, 544 * the path merely indicates where the artifact would eventually be stored. 545 * <p> 546 * Shortcut for {@code getService(LocalArtifactManager.class).getPathForRemoteArtifact(...)}. 547 * 548 * @param remote the repository from where artifacts are downloaded 549 * @param artifact the artifact for which to get a path 550 * @return path associated to the given artifact 551 * 552 * @see org.apache.maven.api.services.LocalRepositoryManager#getPathForRemoteArtifact(Session, LocalRepository, RemoteRepository, Artifact) 553 */ 554 @Nonnull 555 Path getPathForRemoteArtifact(@Nonnull RemoteRepository remote, @Nonnull Artifact artifact); 556 557 /** 558 * Checks whether a given artifact version is considered a {@code SNAPSHOT} or not. 559 * <p> 560 * Shortcut for {@code getService(ArtifactManager.class).isSnapshot(...)}. 561 * <p> 562 * In case there is {@link Artifact} in scope, the recommended way to perform this check is 563 * use of {@link Artifact#isSnapshot()} instead. 564 * 565 * @param version artifact version 566 * @return whether the given version is a snapshot 567 * 568 * @see org.apache.maven.api.services.VersionParser#isSnapshot(String) 569 */ 570 boolean isVersionSnapshot(@Nonnull String version); 571 572 /** 573 * Shortcut for {@code getService(DependencyResolver.class).collect(...)} 574 * 575 * @param artifact artifact for which to get the dependencies, including transitive ones 576 * @return root node of the dependency graph for the given artifact 577 * 578 * @see org.apache.maven.api.services.DependencyResolver#collect(Session, Artifact) 579 * @throws org.apache.maven.api.services.DependencyResolverException if the dependency collection failed 580 */ 581 @Nonnull 582 Node collectDependencies(@Nonnull Artifact artifact); 583 584 /** 585 * Shortcut for {@code getService(DependencyResolver.class).collect(...)} 586 * 587 * @param project project for which to get the dependencies, including transitive ones 588 * @return root node of the dependency graph for the given project 589 * 590 * @see org.apache.maven.api.services.DependencyResolver#collect(Session, Project) 591 * @throws org.apache.maven.api.services.DependencyResolverException if the dependency collection failed 592 */ 593 @Nonnull 594 Node collectDependencies(@Nonnull Project project); 595 596 /** 597 * Collects the transitive dependencies of some artifacts and builds a dependency graph. Note that this operation is 598 * only concerned about determining the coordinates of the transitive dependencies and does not actually resolve the 599 * artifact files. 600 * <p> 601 * Shortcut for {@code getService(DependencyResolver.class).resolve(...)} 602 * 603 * @param dependency dependency for which to get transitive dependencies 604 * @return root node of the dependency graph for the given artifact 605 * 606 * @see org.apache.maven.api.services.DependencyResolver#collect(Session, DependencyCoordinates) 607 * @throws org.apache.maven.api.services.DependencyResolverException if the dependency collection failed 608 */ 609 @Nonnull 610 Node collectDependencies(@Nonnull DependencyCoordinates dependency); 611 612 /** 613 * Shortcut for {@code getService(DependencyResolver.class).flatten(...)}. 614 * 615 * @param node node for which to get a flattened list 616 * @param scope build path scope (main compile, test compile, etc.) of desired nodes 617 * @return flattened list of node with the given build path scope 618 * @throws org.apache.maven.api.services.DependencyResolverException if the dependency flattening failed 619 * 620 * @see org.apache.maven.api.services.DependencyResolver#flatten(Session, Node, PathScope) 621 */ 622 @Nonnull 623 List<Node> flattenDependencies(@Nonnull Node node, @Nonnull PathScope scope); 624 625 /** 626 * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getPaths()}. 627 * 628 * @param dependencyCoordinates coordinates of the dependency for which to get the paths 629 * @return paths to the transitive dependencies of the given dependency 630 * 631 * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, DependencyCoordinates) 632 */ 633 @Nonnull 634 List<Path> resolveDependencies(@Nonnull DependencyCoordinates dependencyCoordinates); 635 636 /** 637 * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getPaths()}. 638 * 639 * @param dependencyCoordinates coordinates of all dependency for which to get the paths 640 * @return paths to the transitive dependencies of the given dependencies 641 * 642 * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, List) 643 */ 644 @Nonnull 645 List<Path> resolveDependencies(@Nonnull List<DependencyCoordinates> dependencyCoordinates); 646 647 /** 648 * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getPaths()}. 649 * 650 * @param project the project for which to get dependencies 651 * @param scope build path scope (main compile, test compile, etc.) of desired paths 652 * @return paths to the transitive dependencies of the given project 653 * 654 * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, Project, PathScope) 655 */ 656 @Nonnull 657 List<Path> resolveDependencies(@Nonnull Project project, @Nonnull PathScope scope); 658 659 /** 660 * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getDispatchedPaths()}. 661 * 662 * @param dependencyCoordinates coordinates of the dependency for which to get the paths 663 * @param scope build path scope (main compile, test compile, etc.) of desired paths 664 * @param desiredTypes the type of paths to include in the result 665 * @return paths to the transitive dependencies of the given project 666 * 667 * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, Project, PathScope) 668 */ 669 @Nonnull 670 Map<PathType, List<Path>> resolveDependencies( 671 @Nonnull DependencyCoordinates dependencyCoordinates, 672 @Nonnull PathScope scope, 673 @Nonnull Collection<PathType> desiredTypes); 674 675 /** 676 * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getDispatchedPaths()}. 677 * 678 * @param project the project for which to get dependencies 679 * @param scope build path scope (main compile, test compile, etc.) of desired paths 680 * @param desiredTypes the type of paths to include in the result 681 * @return paths to the transitive dependencies of the given project 682 * 683 * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, Project, PathScope) 684 */ 685 @Nonnull 686 Map<PathType, List<Path>> resolveDependencies( 687 @Nonnull Project project, @Nonnull PathScope scope, @Nonnull Collection<PathType> desiredTypes); 688 689 /** 690 * Resolves an artifact's meta version (if any) to a concrete version. 691 * For example, resolves "1.0-SNAPSHOT" to "1.0-20090208.132618-23". 692 * <p> 693 * Shortcut for {@code getService(VersionResolver.class).resolve(...)} 694 * 695 * @param artifact the artifact for which to resolve the version 696 * @return resolved version of the given artifact 697 * @throws org.apache.maven.api.services.VersionResolverException if the resolution failed 698 * 699 * @see org.apache.maven.api.services.VersionResolver#resolve(Session, ArtifactCoordinates) (String) 700 */ 701 @Nonnull 702 Version resolveVersion(@Nonnull ArtifactCoordinates artifact); 703 704 /** 705 * Expands a version range to a list of matching versions, in ascending order. 706 * For example, resolves "[3.8,4.0)" to "3.8", "3.8.1", "3.8.2". 707 * The returned list of versions is only dependent on the configured repositories and their contents. 708 * The supplied request may also refer to a single concrete version rather than a version range. 709 * In this case though, the result contains simply the (parsed) input version, regardless of the 710 * repositories and their contents. 711 * 712 * @param artifact the artifact for which to resolve the versions 713 * @return a list of resolved {@code Version}s. 714 * @throws org.apache.maven.api.services.VersionRangeResolverException if the resolution failed 715 * @see org.apache.maven.api.services.VersionRangeResolver#resolve(Session, ArtifactCoordinates) (String) 716 */ 717 @Nonnull 718 List<Version> resolveVersionRange(@Nonnull ArtifactCoordinates artifact); 719 720 /** 721 * Parses the specified version string, for example "1.0". 722 * <p> 723 * Shortcut for {@code getService(VersionParser.class).parseVersion(...)}. 724 * 725 * @param version the version string to parse 726 * @return the version parsed from the given string 727 * @throws org.apache.maven.api.services.VersionParserException if the parsing failed 728 * @see org.apache.maven.api.services.VersionParser#parseVersion(String) 729 */ 730 @Nonnull 731 Version parseVersion(@Nonnull String version); 732 733 /** 734 * Parses the specified version range specification, for example "[1.0,2.0)". 735 * <p> 736 * Shortcut for {@code getService(VersionParser.class).parseVersionRange(...)}. 737 * 738 * @param versionRange the version string to parse 739 * @return the version range parsed from the given string 740 * @throws org.apache.maven.api.services.VersionParserException if the parsing failed 741 * @see org.apache.maven.api.services.VersionParser#parseVersionRange(String) 742 */ 743 @Nonnull 744 VersionRange parseVersionRange(@Nonnull String versionRange); 745 746 /** 747 * Parses the specified version constraint specification, for example "1.0" or "[1.0,2.0)". 748 * <p> 749 * Shortcut for {@code getService(VersionParser.class).parseVersionConstraint(...)}. 750 * 751 * @param versionConstraint the version string to parse 752 * @return the version constraint parsed from the given string 753 * @throws org.apache.maven.api.services.VersionParserException if the parsing failed 754 * @see org.apache.maven.api.services.VersionParser#parseVersionConstraint(String) 755 */ 756 @Nonnull 757 VersionConstraint parseVersionConstraint(@Nonnull String versionConstraint); 758 759 /** 760 * Obtain the {@link Type} from the specified {@code id}. 761 * <p> 762 * Shortcut for {@code getService(TypeRegistry.class).require(...)}. 763 * 764 * @see org.apache.maven.api.services.TypeRegistry#require(String) 765 */ 766 @Nonnull 767 Type requireType(@Nonnull String id); 768 769 /** 770 * Obtain the {@link Language} from the specified {@code id}. 771 * <p> 772 * Shortcut for {@code getService(LanguageRegistry.class).require(...)}. 773 * 774 * @see org.apache.maven.api.services.LanguageRegistry#require(String) 775 */ 776 @Nonnull 777 Language requireLanguage(@Nonnull String id); 778 779 /** 780 * Obtain the {@link Packaging} from the specified {@code id}. 781 * <p> 782 * Shortcut for {@code getService(PackagingRegistry.class).require(...)}. 783 * 784 * @see org.apache.maven.api.services.PackagingRegistry#require(String) 785 */ 786 @Nonnull 787 Packaging requirePackaging(@Nonnull String id); 788 789 /** 790 * Obtain the {@link ProjectScope} from the specified {@code id}. 791 * <p> 792 * Shortcut for {@code getService(ProjectScopeRegistry.class).require(...)}. 793 * 794 * @see org.apache.maven.api.services.ProjectScopeRegistry#require(String) 795 */ 796 @Nonnull 797 ProjectScope requireProjectScope(@Nonnull String id); 798 799 /** 800 * Obtain the {@link DependencyScope} from the specified {@code id}. 801 * <p> 802 * Shortcut for {@code DependencyScope.forId(...)}. 803 * 804 * @see org.apache.maven.api.DependencyScope#forId(String) 805 */ 806 @Nonnull 807 DependencyScope requireDependencyScope(@Nonnull String id); 808 809 /** 810 * Obtain the {@link PathScope} from the specified {@code id}. 811 * <p> 812 * Shortcut for {@code getService(PathScopeRegistry.class).require(...)}. 813 * 814 * @see org.apache.maven.api.services.PathScopeRegistry#require(String) 815 */ 816 @Nonnull 817 PathScope requirePathScope(@Nonnull String id); 818 }