1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 }