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