View Javadoc
1   package org.apache.maven.api;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.nio.file.Path;
23  import java.time.Instant;
24  import java.util.Collection;
25  import java.util.List;
26  import java.util.Map;
27  import java.util.NoSuchElementException;
28  import java.util.Optional;
29  
30  import org.apache.maven.api.annotations.Experimental;
31  import org.apache.maven.api.annotations.Nonnull;
32  import org.apache.maven.api.annotations.ThreadSafe;
33  import org.apache.maven.api.model.Repository;
34  import org.apache.maven.api.services.DependencyCoordinateFactory;
35  import org.apache.maven.api.settings.Settings;
36  
37  /**
38   * The session to install / deploy / resolve artifacts and dependencies.
39   *
40   * @since 4.0
41   */
42  @Experimental
43  @ThreadSafe
44  public interface Session
45  {
46  
47      @Nonnull
48      Settings getSettings();
49  
50      @Nonnull
51      LocalRepository getLocalRepository();
52  
53      @Nonnull
54      List<RemoteRepository> getRemoteRepositories();
55  
56      @Nonnull
57      SessionData getData();
58  
59      @Nonnull
60      Map<String, String> getUserProperties();
61  
62      @Nonnull
63      Map<String, String> getSystemProperties();
64  
65      /**
66       * Returns the current maven version
67       * @return the maven version, never {@code null}.
68       */
69      @Nonnull
70      String getMavenVersion();
71  
72      int getDegreeOfConcurrency();
73  
74      @Nonnull
75      Instant getStartTime();
76  
77      @Nonnull
78      Path getMultiModuleProjectDirectory();
79  
80      @Nonnull
81      Path getExecutionRootDirectory();
82  
83      @Nonnull
84      List<Project> getProjects();
85  
86      /**
87       * Returns the plugin context for mojo being executed and the specified
88       * {@link Project}, never returns {@code null} as if context not present, creates it.
89       *
90       * <strong>Implementation note:</strong> while this method return type is {@link Map}, the returned map instance
91       * implements {@link java.util.concurrent.ConcurrentMap} as well.
92       *
93       * @throws org.apache.maven.api.services.MavenException if not called from the within a mojo execution
94       */
95      @Nonnull
96      Map<String, Object> getPluginContext( @Nonnull Project project );
97  
98      /**
99       * Retrieves the service for the interface
100      *
101      * @throws NoSuchElementException if the service could not be found
102      */
103     @Nonnull
104     <T extends Service> T getService( @Nonnull Class<T> clazz );
105 
106     /**
107      * Creates a derived session using the given local repository.
108      *
109      * @param localRepository the new local repository
110      * @return the derived session
111      * @throws NullPointerException if {@code localRepository} is null
112      */
113     @Nonnull
114     Session withLocalRepository( @Nonnull LocalRepository localRepository );
115 
116     /**
117      * Creates a derived session using the given remote repositories.
118      *
119      * @param repositories the new list of remote repositories
120      * @return the derived session
121      * @throws NullPointerException if {@code repositories} is null
122      */
123     @Nonnull
124     Session withRemoteRepositories( @Nonnull List<RemoteRepository> repositories );
125 
126     /**
127      * Register the given listener which will receive all events.
128      *
129      * @param listener the listener to register
130      * @throws NullPointerException if {@code listener} is null
131      */
132     void registerListener( @Nonnull Listener listener );
133 
134     /**
135      * Unregisters a previously registered listener.
136      *
137      * @param listener the listener to unregister
138      * @throws NullPointerException if {@code listener} is null
139      */
140     void unregisterListener( @Nonnull Listener listener );
141 
142     /**
143      * Returns the list of registered listeners.
144      *
145      * @return an immutable collection of listeners, never {@code null}
146      */
147     @Nonnull
148     Collection<Listener> getListeners();
149 
150     /**
151      * Shortcut for <code>getService(RepositoryFactory.class).createLocal(...)</code>
152      * @see org.apache.maven.api.services.RepositoryFactory#createLocal(Path)
153      */
154     LocalRepository createLocalRepository( Path path );
155 
156     /**
157      * Shortcut for <code>getService(RepositoryFactory.class).createRemote(...)</code>
158      * @see org.apache.maven.api.services.RepositoryFactory#createRemote(String, String)
159      */
160     @Nonnull
161     RemoteRepository createRemoteRepository( @Nonnull String id, @Nonnull String url );
162 
163     /**
164      * Shortcut for <code>getService(RepositoryFactory.class).createRemote(...)</code>
165      * @see org.apache.maven.api.services.RepositoryFactory#createRemote(Repository)
166      */
167     @Nonnull
168     RemoteRepository createRemoteRepository( @Nonnull Repository repository );
169 
170     /**
171      * Shortcut for <code>getService(ArtifactFactory.class).create(...)</code>
172      * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String)
173      */
174     ArtifactCoordinate createArtifactCoordinate( String groupId, String artifactId, String version, String extension );
175 
176     /**
177      * Shortcut for <code>getService(ArtifactFactory.class).create(...)</code>
178      * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String, String, String)
179      */
180     ArtifactCoordinate createArtifactCoordinate( String groupId, String artifactId, String version, String classifier,
181                                                  String extension, String type );
182 
183     /**
184      * Shortcut for <code>getService(ArtifactFactory.class).create(...)</code>
185      * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String, String, String)
186      */
187     ArtifactCoordinate createArtifactCoordinate( Artifact artifact );
188 
189     /**
190      * Shortcut for <code>getService(DependencyFactory.class).create(...)</code>
191      * @see DependencyCoordinateFactory#create(Session, ArtifactCoordinate)
192      */
193     @Nonnull
194     DependencyCoordinate createDependencyCoordinate( @Nonnull ArtifactCoordinate coordinate );
195 
196     /**
197      * Shortcut for <code>getService(ArtifactFactory.class).create(...)</code>
198      * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String)
199      */
200     Artifact createArtifact( String groupId, String artifactId, String version, String extension );
201 
202     /**
203      * Shortcut for <code>getService(ArtifactFactory.class).create(...)</code>
204      * @see org.apache.maven.api.services.ArtifactFactory#create(Session, String, String, String, String, String, String)
205      */
206     Artifact createArtifact( String groupId, String artifactId, String version, String classifier,
207                              String extension, String type );
208 
209     /**
210      * Shortcut for <code>getService(ArtifactResolver.class).resolve(...)</code>
211      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
212      *
213      * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
214      */
215     Artifact resolveArtifact( ArtifactCoordinate coordinate );
216 
217     /**
218      * Shortcut for <code>getService(ArtifactResolver.class).resolve(...)</code>
219      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
220      *
221      * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
222      */
223     Collection<Artifact> resolveArtifacts( ArtifactCoordinate... coordinates );
224 
225     /**
226      * Shortcut for <code>getService(ArtifactResolver.class).resolve(...)</code>
227      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
228      *
229      * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
230      */
231     Collection<Artifact> resolveArtifacts( Collection<? extends ArtifactCoordinate> coordinates );
232 
233     /**
234      * Shortcut for <code>getService(ArtifactResolver.class).resolve(...)</code>
235      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
236      *
237      * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
238      */
239     Artifact resolveArtifact( Artifact artifact );
240 
241     /**
242      * Shortcut for <code>getService(ArtifactResolver.class).resolve(...)</code>
243      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
244      *
245      * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
246      */
247     Collection<Artifact> resolveArtifacts( Artifact... artifacts );
248 
249     /**
250      * Shortcut for {@code getService(ArtifactInstaller.class).install(...)}
251      * @see org.apache.maven.api.services.ArtifactInstaller#install(Session, Collection)
252      *
253      * @throws org.apache.maven.api.services.ArtifactInstallerException if the artifacts installation failed
254      */
255     void installArtifacts( Artifact... artifacts );
256 
257     /**
258      * Shortcut for {@code getService(ArtifactInstaller.class).install(...)}
259      * @see org.apache.maven.api.services.ArtifactInstaller#install(Session, Collection)
260      *
261      * @throws org.apache.maven.api.services.ArtifactInstallerException if the artifacts installation failed
262      */
263     void installArtifacts( Collection<Artifact> artifacts );
264 
265     /**
266      * Shortcut for <code>getService(ArtifactDeployer.class).deploy(...)</code>
267      * @see org.apache.maven.api.services.ArtifactDeployer#deploy(Session, RemoteRepository, Collection)
268      *
269      * @throws org.apache.maven.api.services.ArtifactDeployerException if the artifacts deployment failed
270      */
271     void deployArtifact( RemoteRepository repository, Artifact... artifacts );
272 
273     /**
274      * Shortcut for <code>getService(ArtifactManager.class).setPath(...)</code>
275      * @see org.apache.maven.api.services.ArtifactManager#setPath(Artifact, Path)
276      */
277     void setArtifactPath( @Nonnull Artifact artifact, @Nonnull Path path );
278 
279     /**
280      * Shortcut for <code>getService(ArtifactManager.class).getPath(...)</code>
281      * @see org.apache.maven.api.services.ArtifactManager#getPath(Artifact)
282      */
283     @Nonnull
284     Optional<Path> getArtifactPath( @Nonnull Artifact artifact );
285 
286     /**
287      * Shortcut for <code>getService(ArtifactManager.class).isSnapshot(...)</code>
288      * @see org.apache.maven.api.services.VersionParser#isSnapshot(String)
289      */
290     boolean isVersionSnapshot( @Nonnull String version );
291 
292     /**
293      * Shortcut for <code>getService(DependencyCollector.class).collect(...)</code>
294      * @see org.apache.maven.api.services.DependencyCollector#collect(Session, Artifact)
295      *
296      * @throws org.apache.maven.api.services.DependencyCollectorException if the dependency collection failed
297      */
298     @Nonnull
299     Node collectDependencies( @Nonnull Artifact artifact );
300 
301     /**
302      * Shortcut for <code>getService(DependencyCollector.class).collect(...)</code>
303      * @see org.apache.maven.api.services.DependencyCollector#collect(Session, Project)
304      *
305      * @throws org.apache.maven.api.services.DependencyCollectorException if the dependency collection failed
306      */
307     @Nonnull
308     Node collectDependencies( @Nonnull Project project );
309 
310     /**
311      * Shortcut for <code>getService(DependencyResolver.class).resolve(...)</code>
312      * @see org.apache.maven.api.services.DependencyCollector#collect(Session, DependencyCoordinate)
313      *
314      * @throws org.apache.maven.api.services.DependencyCollectorException if the dependency collection failed
315      */
316     @Nonnull
317     Node collectDependencies( @Nonnull DependencyCoordinate dependency );
318 
319     Path getPathForLocalArtifact( @Nonnull Artifact artifact );
320 
321     Path getPathForRemoteArtifact( RemoteRepository remote, Artifact artifact );
322 
323     /**
324      * Shortcut for <code>getService(VersionParser.class).parseVersion(...)</code>
325      * @see org.apache.maven.api.services.VersionParser#parseVersion(String)
326      *
327      * @throws org.apache.maven.api.services.VersionParserException if the parsing failed
328      */
329     @Nonnull
330     Version parseVersion( @Nonnull String version );
331 
332     /**
333      * Shortcut for <code>getService(VersionParser.class).parseVersionRange(...)</code>
334      * @see org.apache.maven.api.services.VersionParser#parseVersionRange(String)
335      *
336      * @throws org.apache.maven.api.services.VersionParserException if the parsing failed
337      */
338     @Nonnull
339     VersionRange parseVersionRange( @Nonnull String versionRange );
340 }