forked from eclipse-ee4j/jersey
-
Notifications
You must be signed in to change notification settings - Fork 0
/
DownloadBomPomDependencies.java
110 lines (96 loc) · 5.27 KB
/
DownloadBomPomDependencies.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
* Copyright (c) 2022, 2023 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package org.glassfish.jersey.test.artifacts;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.impl.DefaultServiceLocator;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
import org.eclipse.aether.transport.http.HttpTransporterFactory;
import org.apache.maven.execution.DefaultMavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.ProjectBuilder;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingResult;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.junit.Test;
import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.List;
import java.util.Properties;
import java.util.stream.Collectors;
public class DownloadBomPomDependencies extends AbstractMojoTestCase {
@Test
public void testDownloadBomPomDependencies() throws Exception {
// RepositorySystem repositorySystem = (RepositorySystem) lookup(RepositorySystem.class.getName());
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
RepositorySystem repositorySystem = locator.getService(RepositorySystem.class);
RepositorySystemSession repoSession = getRepoSession(repositorySystem);
List<RemoteRepository> remoteRepos = getRemoteRepositories(repoSession);
Properties properties = MavenUtil.getMavenProperties();
String jerseyVersion = MavenUtil.getJerseyVersion(properties);
List<Dependency> memberDeps = MavenUtil.streamJerseyJars().collect(Collectors.toList());
for (Dependency member : memberDeps) {
member.setVersion(jerseyVersion);
Artifact m = DependencyResolver.resolveArtifact(member, remoteRepos, repositorySystem, repoSession);
System.out.append("Resolved ").append(member.getGroupId()).append(":").append(member.getArtifactId()).append(":")
.append(member.getVersion()).append(" to ").println(m.getFile().getName());
}
}
private List<RemoteRepository> getRemoteRepositories(RepositorySystemSession session) throws Exception {
File pom = lookupResourcesPom("/release-test-pom.xml");
MavenExecutionRequest request = new DefaultMavenExecutionRequest();
request.setPom(pom);
request.addActiveProfile("staging");
ProjectBuildingRequest buildingRequest = request
.getProjectBuildingRequest()
.setRepositorySession(session)
.setResolveDependencies(true);
ProjectBuilder projectBuilder = lookup(ProjectBuilder.class);
ProjectBuildingResult projectBuildingResult = projectBuilder.build(pom, buildingRequest);
MavenProject project = projectBuildingResult.getProject();
List<RemoteRepository> remoteArtifactRepositories = project.getRemoteProjectRepositories();
return remoteArtifactRepositories;
}
private static RepositorySystemSession getRepoSession(RepositorySystem repositorySystem) {
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
LocalRepository localRepo = new LocalRepository(MavenUtil.getLocalMavenRepository().getAbsolutePath());
session.setLocalRepositoryManager(repositorySystem.newLocalRepositoryManager(session, localRepo));
return session;
}
private static File lookupResourcesPom(String pomFile) throws URISyntaxException {
URL resource = DownloadBomPomDependencies.class.getResource(pomFile);
if (resource == null) {
throw new IllegalStateException("Pom file " + pomFile + " was not located on classpath!");
}
File file = new File(resource.toURI());
if (!file.exists()) {
throw new IllegalStateException("Cannot locate test pom xml file!");
}
return file;
}
}