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.services; 20 21 import java.util.concurrent.atomic.AtomicReference; 22 import java.util.function.Consumer; 23 24 import org.apache.maven.api.Service; 25 import org.apache.maven.api.Session; 26 import org.apache.maven.api.annotations.Nonnull; 27 import org.apache.maven.api.model.Dependency; 28 import org.apache.maven.api.model.Parent; 29 30 /** 31 * Resolves a POM from its coordinates. 32 */ 33 public interface ModelResolver extends Service { 34 35 /** 36 * Tries to resolve the POM for the specified parent coordinates possibly updating {@code parent}. 37 * 38 * @param session The session to use to resolve the model, must not be {@code null}. 39 * @param parent The parent coordinates to resolve, must not be {@code null}. 40 * @param modified a holder for the updated parent, must not be {@code null}. 41 * @return The source of the requested POM, never {@code null}. 42 * @throws ModelResolverException If the POM could not be resolved from any configured repository. 43 */ 44 @Nonnull 45 default ModelSource resolveModel( 46 @Nonnull Session session, @Nonnull Parent parent, @Nonnull AtomicReference<Parent> modified) 47 throws ModelResolverException { 48 return resolveModel( 49 session, 50 parent.getGroupId(), 51 parent.getArtifactId(), 52 parent.getVersion(), 53 version -> modified.set(parent.withVersion(version))); 54 } 55 56 /** 57 * Tries to resolve the POM for the specified dependency coordinates possibly updating {@code dependency}. 58 * 59 * @param session The session to use to resolve the model, must not be {@code null}. 60 * @param dependency The dependency coordinates to resolve, must not be {@code null}. 61 * @param modified a holder for the updated dependency, must not be {@code null}. 62 * @return The source of the requested POM, never {@code null}. 63 * @throws ModelResolverException If the POM could not be resolved from any configured repository. 64 */ 65 @Nonnull 66 default ModelSource resolveModel( 67 @Nonnull Session session, @Nonnull Dependency dependency, @Nonnull AtomicReference<Dependency> modified) 68 throws ModelResolverException { 69 return resolveModel( 70 session, 71 dependency.getGroupId(), 72 dependency.getArtifactId(), 73 dependency.getVersion(), 74 version -> modified.set(dependency.withVersion(version))); 75 } 76 77 @Nonnull 78 ModelSource resolveModel( 79 @Nonnull Session session, 80 @Nonnull String groupId, 81 @Nonnull String artifactId, 82 @Nonnull String version, 83 @Nonnull Consumer<String> resolvedVersion) 84 throws ModelResolverException; 85 }