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 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 }