001 package org.apache.maven.project;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import java.util.List;
023
024 import org.apache.maven.artifact.InvalidRepositoryException;
025 import org.apache.maven.artifact.repository.ArtifactRepository;
026 import org.apache.maven.model.Model;
027 import org.apache.maven.model.Repository;
028 import org.apache.maven.plugin.PluginResolutionException;
029 import org.apache.maven.plugin.version.PluginVersionResolutionException;
030
031 /**
032 * Assists the project builder. <strong>Warning:</strong> This is an internal utility interface that is only public for
033 * technical reasons, it is not part of the public API. In particular, this interface can be changed or deleted without
034 * prior notice.
035 *
036 * @author Benjamin Bentmann
037 */
038 public interface ProjectBuildingHelper
039 {
040
041 /**
042 * Creates the effective artifact repositories from the specified POM repositories.
043 *
044 * @param pomRepositories The POM repositories to create the artifact repositories from, must not be {@code null}.
045 * @param externalRepositories The external (and already mirrored) repositories to merge into the result list, may
046 * be {@code null}.
047 * @param request The project building request holding further settings like repository settings, must not be
048 * {@code null}.
049 * @return The effective artifact repositories, never {@code null}.
050 * @throws InvalidRepositoryException
051 */
052 List<ArtifactRepository> createArtifactRepositories( List<Repository> pomRepositories,
053 List<ArtifactRepository> externalRepositories,
054 ProjectBuildingRequest request )
055 throws InvalidRepositoryException;
056
057 /**
058 * Creates the project realm that hosts the build extensions of the specified model.
059 *
060 * @param project The project to create the project realm for, must not be {@code null}
061 * @param model The model to create the project realm for, must not be {@code null}
062 * @param request The project building request holding further settings like repository settings, must not be
063 * {@code null}.
064 * @return The record with the project realm and extension artifact filter, never {@code null}.
065 * @throws PluginResolutionException If any build extension could not be resolved.
066 */
067 ProjectRealmCache.CacheRecord createProjectRealm( MavenProject project, Model model,
068 ProjectBuildingRequest request )
069 throws PluginResolutionException, PluginVersionResolutionException;
070
071 /**
072 * Updates the context class loader such that the container will search the project realm when the model builder
073 * injects the lifecycle bindings from the packaging in the next step. The context class loader is to be reset by
074 * the project builder when the project is fully assembled.
075 *
076 * @param project The project whose class realm should be selected, must not be {@code null}.
077 */
078 void selectProjectRealm( MavenProject project );
079
080 }