|
21 | 21 | import java.util.LinkedHashSet; |
22 | 22 | import java.util.List; |
23 | 23 | import java.util.Set; |
| 24 | +import java.util.stream.Collectors; |
24 | 25 |
|
25 | 26 | import org.eclipse.aether.RepositorySystem; |
26 | 27 | import org.eclipse.aether.RepositorySystemSession; |
|
39 | 40 | import org.eclipse.aether.util.filter.DependencyFilterUtils; |
40 | 41 |
|
41 | 42 | import com.diffplug.spotless.Provisioner; |
| 43 | +import com.diffplug.spotless.ThrowingEx; |
42 | 44 |
|
43 | 45 | public class SpotlessCliMavenProvisioner implements Provisioner { |
44 | 46 |
|
@@ -78,60 +80,70 @@ private RepositorySystemSession newSession(RepositorySystem system) { |
78 | 80 | .get() |
79 | 81 | .withLocalRepositoryBaseDirectories(localMavenRepo) |
80 | 82 | .build(); |
81 | | - // DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); |
82 | | - // LocalRepository localRepo = new LocalRepository(localMavenRepo.toFile()); |
83 | | - // session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo)); |
84 | | - // return session; |
85 | 83 | } |
86 | 84 |
|
87 | 85 | @Override |
88 | 86 | public Set<File> provisionWithTransitives(boolean withTransitives, Collection<String> mavenCoordinates) { |
89 | | - RepositorySystem repositorySystem = newRepositorySystem(); |
90 | | - RepositorySystemSession repositorySystemSession = newSession(repositorySystem); |
91 | | - |
92 | | - // Let the resolver apply mirrors / proxies / repo managers etc. (like Maven) |
93 | | - List<RemoteRepository> resolutionRepos = |
94 | | - repositorySystem.newResolutionRepositories(repositorySystemSession, remoteRepositories); |
95 | | - |
96 | | - Set<File> jarFiles = new LinkedHashSet<>(); |
97 | | - |
98 | | - for (String coord : mavenCoordinates) { |
99 | | - Artifact artifact = new DefaultArtifact(coord); |
100 | | - |
101 | | - try { |
102 | | - if (withTransitives) { |
103 | | - // Resolve full dependency graph |
104 | | - CollectRequest collectRequest = new CollectRequest(); |
105 | | - collectRequest.setRoot(new Dependency(artifact, JavaScopes.RUNTIME)); |
106 | | - collectRequest.setRepositories(resolutionRepos); |
107 | | - |
108 | | - DependencyRequest dependencyRequest = new DependencyRequest( |
109 | | - collectRequest, DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME)); |
110 | | - |
111 | | - DependencyResult result = |
112 | | - repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest); |
113 | | - |
114 | | - System.out.println(result.getRoot()); |
115 | | - result.getArtifactResults().forEach(r -> { |
116 | | - File f = r.getArtifact().getFile(); |
117 | | - if (f != null) jarFiles.add(f); |
118 | | - }); |
119 | | - |
120 | | - } else { |
121 | | - // Resolve just the main artifact |
122 | | - ArtifactRequest request = new ArtifactRequest(); |
123 | | - request.setArtifact(artifact); |
124 | | - remoteRepositories.forEach(request::addRepository); |
125 | | - |
126 | | - ArtifactResult result = repositorySystem.resolveArtifact(repositorySystemSession, request); |
127 | | - jarFiles.add(result.getArtifact().getFile()); |
128 | | - } |
129 | | - |
130 | | - } catch (Exception e) { |
131 | | - throw new RuntimeException("Failed to resolve: " + coord, e); |
132 | | - } |
133 | | - } |
| 87 | + |
| 88 | + final ArtifactResolverFunc artifactResolverFunc = |
| 89 | + withTransitives ? new DependencyGraphResolverFunc() : new SingleArtifactResolverFunc(); |
| 90 | + |
| 91 | + Set<File> jarFiles = mavenCoordinates.stream() |
| 92 | + .map(DefaultArtifact::new) |
| 93 | + .flatMap(ThrowingEx.wrap(artifact -> artifactResolverFunc.apply(artifact).stream())) |
| 94 | + .map(ArtifactResult::getArtifact) |
| 95 | + .map(Artifact::getPath) |
| 96 | + .map(Path::toFile) |
| 97 | + .collect(Collectors.toCollection(LinkedHashSet::new)); |
134 | 98 |
|
135 | 99 | return jarFiles; |
136 | 100 | } |
| 101 | + |
| 102 | + private interface ArtifactResolverFunc { |
| 103 | + List<ArtifactResult> apply(Artifact artifact) throws Exception; |
| 104 | + } |
| 105 | + |
| 106 | + private abstract class BaseArtifactResolverFunc implements ArtifactResolverFunc { |
| 107 | + protected final RepositorySystem repositorySystem; |
| 108 | + protected final RepositorySystemSession repositorySystemSession; |
| 109 | + protected final List<RemoteRepository> resolutionRepos; |
| 110 | + |
| 111 | + protected BaseArtifactResolverFunc() { |
| 112 | + this.repositorySystem = newRepositorySystem(); |
| 113 | + this.repositorySystemSession = newSession(repositorySystem); |
| 114 | + this.resolutionRepos = |
| 115 | + repositorySystem.newResolutionRepositories(repositorySystemSession, remoteRepositories); |
| 116 | + } |
| 117 | + } |
| 118 | + |
| 119 | + private class DependencyGraphResolverFunc extends BaseArtifactResolverFunc { |
| 120 | + |
| 121 | + @Override |
| 122 | + public List<ArtifactResult> apply(Artifact artifact) throws Exception { |
| 123 | + |
| 124 | + CollectRequest collectRequest = new CollectRequest(); |
| 125 | + collectRequest.setRoot(new Dependency(artifact, JavaScopes.RUNTIME)); |
| 126 | + collectRequest.setRepositories(remoteRepositories); |
| 127 | + |
| 128 | + DependencyRequest dependencyRequest = |
| 129 | + new DependencyRequest(collectRequest, DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME)); |
| 130 | + |
| 131 | + DependencyResult result = repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest); |
| 132 | + |
| 133 | + return result.getArtifactResults(); |
| 134 | + } |
| 135 | + } |
| 136 | + |
| 137 | + private class SingleArtifactResolverFunc extends BaseArtifactResolverFunc { |
| 138 | + |
| 139 | + @Override |
| 140 | + public List<ArtifactResult> apply(Artifact artifact) throws Exception { |
| 141 | + ArtifactRequest request = new ArtifactRequest(); |
| 142 | + request.setArtifact(artifact); |
| 143 | + remoteRepositories.forEach(request::addRepository); |
| 144 | + |
| 145 | + ArtifactResult result = repositorySystem.resolveArtifact(repositorySystemSession, request); |
| 146 | + return List.of(result); |
| 147 | + } |
| 148 | + } |
137 | 149 | } |
0 commit comments