View Javadoc
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.internal.impl;
20  
21  import javax.inject.Inject;
22  
23  import java.nio.file.Path;
24  import java.util.Collections;
25  import java.util.Optional;
26  
27  import org.apache.maven.api.Artifact;
28  import org.apache.maven.api.ArtifactCoordinate;
29  import org.apache.maven.api.Node;
30  import org.apache.maven.api.Project;
31  import org.apache.maven.api.Session;
32  import org.apache.maven.api.services.ProjectBuilder;
33  import org.apache.maven.api.services.ProjectBuilderRequest;
34  import org.apache.maven.api.services.SettingsBuilder;
35  import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
36  import org.apache.maven.bridge.MavenRepositorySystem;
37  import org.apache.maven.execution.DefaultMavenExecutionRequest;
38  import org.apache.maven.execution.MavenSession;
39  import org.apache.maven.execution.scope.internal.MojoExecutionScope;
40  import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
41  import org.apache.maven.rtinfo.RuntimeInformation;
42  import org.apache.maven.session.scope.internal.SessionScope;
43  import org.apache.maven.toolchain.DefaultToolchainManagerPrivate;
44  import org.apache.maven.toolchain.building.ToolchainsBuilder;
45  import org.codehaus.plexus.PlexusContainer;
46  import org.codehaus.plexus.testing.PlexusTest;
47  import org.eclipse.aether.RepositorySystem;
48  import org.eclipse.aether.RepositorySystemSession;
49  import org.eclipse.aether.repository.LocalRepository;
50  import org.eclipse.aether.repository.RemoteRepository;
51  import org.junit.jupiter.api.BeforeEach;
52  import org.junit.jupiter.api.Test;
53  
54  import static org.junit.jupiter.api.Assertions.assertNotNull;
55  import static org.junit.jupiter.api.Assertions.assertTrue;
56  
57  @PlexusTest
58  class TestApi {
59  
60      Session session;
61  
62      @Inject
63      RepositorySystem repositorySystem;
64  
65      @Inject
66      org.apache.maven.project.ProjectBuilder projectBuilder;
67  
68      @Inject
69      MavenRepositorySystem mavenRepositorySystem;
70  
71      @Inject
72      DefaultToolchainManagerPrivate toolchainManagerPrivate;
73  
74      @Inject
75      PlexusContainer plexusContainer;
76  
77      @Inject
78      MojoExecutionScope mojoExecutionScope;
79  
80      @Inject
81      RuntimeInformation runtimeInformation;
82  
83      @Inject
84      ArtifactHandlerManager artifactHandlerManager;
85  
86      @Inject
87      SessionScope sessionScope;
88  
89      @Inject
90      SettingsBuilder settingsBuilder;
91  
92      @Inject
93      ToolchainsBuilder toolchainsBuilder;
94  
95      @BeforeEach
96      void setup() {
97          RepositorySystemSession rss = MavenRepositorySystemUtils.newSession();
98          DefaultMavenExecutionRequest mer = new DefaultMavenExecutionRequest();
99          MavenSession ms = new MavenSession(null, rss, mer, null);
100         DefaultSession session = new DefaultSession(
101                 ms,
102                 repositorySystem,
103                 Collections.emptyList(),
104                 mavenRepositorySystem,
105                 plexusContainer,
106                 runtimeInformation);
107         DefaultLocalRepository localRepository =
108                 new DefaultLocalRepository(new LocalRepository("target/test-classes/apiv4-repo"));
109         org.apache.maven.api.RemoteRepository remoteRepository = session.getRemoteRepository(
110                 new RemoteRepository.Builder("mirror", "default", "file:target/test-classes/repo").build());
111         this.session = session.withLocalRepository(localRepository)
112                 .withRemoteRepositories(Collections.singletonList(remoteRepository));
113 
114         sessionScope.enter();
115         sessionScope.seed(DefaultSession.class, (DefaultSession) this.session);
116     }
117 
118     @Test
119     void testCreateAndResolveArtifact() throws Exception {
120         ArtifactCoordinate coord =
121                 session.createArtifactCoordinate("org.codehaus.plexus", "plexus-utils", "1.4.5", "pom");
122 
123         Artifact resolved = session.resolveArtifact(coord);
124         Optional<Path> op = session.getArtifactPath(resolved);
125         assertTrue(op.isPresent());
126         assertNotNull(op.get());
127 
128         Project project = session.getService(ProjectBuilder.class)
129                 .build(ProjectBuilderRequest.builder()
130                         .session(session)
131                         .path(op.get())
132                         .processPlugins(false)
133                         .resolveDependencies(false)
134                         .build())
135                 .getProject()
136                 .get();
137         assertNotNull(project);
138 
139         Artifact artifact =
140                 session.createArtifact("org.codehaus.plexus", "plexus-container-default", "1.0-alpha-32", "jar");
141         Node root = session.collectDependencies(artifact);
142         assertNotNull(root);
143     }
144 }