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