1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.repository;
20
21 import javax.inject.Inject;
22
23 import java.io.File;
24 import java.util.Arrays;
25 import java.util.List;
26
27 import org.apache.maven.SimpleLookup;
28 import org.apache.maven.artifact.Artifact;
29 import org.apache.maven.artifact.metadata.SwitchableMetadataSource;
30 import org.apache.maven.artifact.repository.ArtifactRepository;
31 import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
32 import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
33 import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
34 import org.apache.maven.execution.DefaultMavenExecutionRequest;
35 import org.apache.maven.execution.DefaultMavenExecutionResult;
36 import org.apache.maven.execution.MavenSession;
37 import org.apache.maven.internal.impl.DefaultRepositoryFactory;
38 import org.apache.maven.internal.impl.DefaultSession;
39 import org.apache.maven.internal.impl.InternalSession;
40 import org.apache.maven.model.Dependency;
41 import org.apache.maven.model.Repository;
42 import org.apache.maven.model.RepositoryPolicy;
43 import org.apache.maven.plugin.LegacySupport;
44 import org.apache.maven.project.artifact.DefaultMetadataSource;
45 import org.apache.maven.repository.legacy.LegacyRepositorySystem;
46 import org.codehaus.plexus.PlexusContainer;
47 import org.codehaus.plexus.component.composition.CycleDetectedInComponentGraphException;
48 import org.codehaus.plexus.testing.PlexusTest;
49 import org.eclipse.aether.DefaultRepositorySystemSession;
50 import org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider;
51 import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
52 import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer;
53 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
54 import org.eclipse.aether.repository.LocalRepository;
55 import org.junit.jupiter.api.BeforeEach;
56 import org.junit.jupiter.api.Test;
57
58 import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
59 import static org.junit.jupiter.api.Assertions.assertEquals;
60 import static org.junit.jupiter.api.Assertions.assertFalse;
61 import static org.junit.jupiter.api.Assertions.assertTrue;
62
63
64
65
66
67 @PlexusTest
68 @Deprecated
69 class LegacyRepositorySystemTest {
70 @Inject
71 private LegacyRepositorySystem repositorySystem;
72
73 @Inject
74 private ResolutionErrorHandler resolutionErrorHandler;
75
76 @Inject
77 private PlexusContainer container;
78
79 protected List<ArtifactRepository> getRemoteRepositories() throws Exception {
80 File repoDir = new File(getBasedir(), "src/test/remote-repo").getAbsoluteFile();
81
82 RepositoryPolicy policy = new RepositoryPolicy();
83 policy.setEnabled(true);
84 policy.setChecksumPolicy("ignore");
85 policy.setUpdatePolicy("always");
86
87 Repository repository = new Repository();
88 repository.setId(RepositorySystem.DEFAULT_REMOTE_REPO_ID);
89 repository.setUrl("file://" + repoDir.toURI().getPath());
90 repository.setReleases(policy);
91 repository.setSnapshots(policy);
92
93 return Arrays.asList(repositorySystem.buildArtifactRepository(repository));
94 }
95
96 protected ArtifactRepository getLocalRepository() throws Exception {
97 File repoDir = new File(getBasedir(), "target/local-repo").getAbsoluteFile();
98
99 return repositorySystem.createLocalRepository(repoDir);
100 }
101
102 @Test
103 void testThatASystemScopedDependencyIsNotResolvedFromRepositories() throws Exception {
104
105
106
107 Dependency d = new Dependency();
108 d.setGroupId("org.apache.maven.its");
109 d.setArtifactId("b");
110 d.setVersion("0.1");
111 d.setScope(Artifact.SCOPE_COMPILE);
112 Artifact artifact = repositorySystem.createDependencyArtifact(d);
113
114 ArtifactResolutionRequest request = new ArtifactResolutionRequest()
115 .setArtifact(artifact)
116 .setResolveRoot(true)
117 .setResolveTransitively(true)
118 .setRemoteRepositories(getRemoteRepositories())
119 .setLocalRepository(getLocalRepository());
120
121 DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
122 LocalRepository localRepo =
123 new LocalRepository(request.getLocalRepository().getBasedir());
124 session.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory().newInstance(session, localRepo));
125 LegacySupport legacySupport = container.lookup(LegacySupport.class);
126 DefaultMavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
127 MavenSession mavenSession =
128 new MavenSession(container, session, mavenExecutionRequest, new DefaultMavenExecutionResult());
129 legacySupport.setSession(mavenSession);
130 InternalSession iSession = new DefaultSession(
131 mavenSession,
132 null,
133 null,
134 null,
135 new SimpleLookup(List.of(new DefaultRepositoryFactory(new DefaultRemoteRepositoryManager(
136 new DefaultUpdatePolicyAnalyzer(), new DefaultChecksumPolicyProvider())))),
137 null);
138 InternalSession.associate(session, iSession);
139
140 ArtifactResolutionResult result = repositorySystem.resolve(request);
141 resolutionErrorHandler.throwErrors(request, result);
142 assertEquals(2, result.getArtifacts().size());
143
144
145
146
147 d.setScope(Artifact.SCOPE_SYSTEM);
148 File file = new File(getBasedir(), "src/test/repository-system/maven-core-2.1.0.jar");
149 assertTrue(file.exists());
150 d.setSystemPath(file.getCanonicalPath());
151
152 artifact = repositorySystem.createDependencyArtifact(d);
153
154
155
156
157
158
159 request = new ArtifactResolutionRequest()
160 .setArtifact(artifact)
161 .setResolveRoot(true)
162 .setResolveTransitively(true);
163
164 result = repositorySystem.resolve(request);
165 resolutionErrorHandler.throwErrors(request, result);
166 assertEquals(1, result.getArtifacts().size());
167
168
169
170
171 file = new File(getBasedir(), "src/test/repository-system/maven-monkey-2.1.0.jar");
172 assertFalse(file.exists());
173 d.setSystemPath(file.getCanonicalPath());
174 artifact = repositorySystem.createDependencyArtifact(d);
175
176
177
178
179
180
181 request = new ArtifactResolutionRequest()
182 .setArtifact(artifact)
183 .setResolveRoot(true)
184 .setResolveTransitively(true);
185
186 try {
187 result = repositorySystem.resolve(request);
188 resolutionErrorHandler.throwErrors(request, result);
189 } catch (Exception e) {
190 assertTrue(result.hasMissingArtifacts());
191 }
192 }
193
194 @Test
195 void testLocalRepositoryBasedir() throws Exception {
196 File localRepoDir = new File("").getAbsoluteFile();
197
198 ArtifactRepository localRepo = repositorySystem.createLocalRepository(localRepoDir);
199
200 String basedir = localRepo.getBasedir();
201
202 assertFalse(basedir.endsWith("/"));
203 assertFalse(basedir.endsWith("\\"));
204
205 assertEquals(localRepoDir, new File(basedir));
206
207 assertEquals(localRepoDir.getPath(), basedir);
208 }
209
210 @Inject
211 DefaultMetadataSource defaultMetadataSource;
212
213 @Inject
214 SwitchableMetadataSource switchableMetadataSource;
215
216 @BeforeEach
217 void setup() throws CycleDetectedInComponentGraphException {
218 switchableMetadataSource.setDelegate(defaultMetadataSource);
219 }
220 }