Skip to content

Commit 68a1a22

Browse files
Get rid of usage RepositoryMetadataManager
RepositoryMetadataManager is deprecated - has only implementation in maven-compat We should use repositorySystem.resolveMetadata
1 parent c516ad7 commit 68a1a22

File tree

8 files changed

+101
-93
lines changed

8 files changed

+101
-93
lines changed

mrm-api/src/main/java/org/codehaus/mojo/mrm/plugin/FactoryHelper.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.codehaus.mojo.mrm.plugin;
1818

1919
import org.apache.maven.archetype.ArchetypeManager;
20-
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
2120
import org.eclipse.aether.RepositorySystem;
2221

2322
/**
@@ -31,12 +30,6 @@ public interface FactoryHelper {
3130
*/
3231
RepositorySystem getRepositorySystem();
3332

34-
/**
35-
* @return returns the {@link RepositoryMetadataManager} instance
36-
* @since 1.0
37-
*/
38-
RepositoryMetadataManager getRepositoryMetadataManager();
39-
4033
/**
4134
* @return returns the {@link ArchetypeManager} instance
4235
* @since 1.0

mrm-maven-plugin/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@
120120
<groupId>commons-lang</groupId>
121121
<artifactId>commons-lang</artifactId>
122122
</dependency>
123+
<dependency>
124+
<groupId>org.codehaus.plexus</groupId>
125+
<artifactId>plexus-xml</artifactId>
126+
</dependency>
123127

124128
<!-- tests -->
125129
<dependency>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
invoker.goals = help:system
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>org.mojohaus.mrm.hostedrepo.its</groupId>
7+
<artifactId>plugins-metadata</artifactId>
8+
<version>1.0.0</version>
9+
<packaging>pom</packaging>
10+
11+
<description>Test if plugins metadata G level is downloaded</description>
12+
</project>

mrm-maven-plugin/src/it/hostedrepo/src/it/settings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ under the License.
3434
<repositories>
3535
<repository>
3636
<id>local.central</id>
37-
<url>http://local.central</url>
37+
<url>http://localhost</url>
3838
<releases>
3939
<enabled>true</enabled>
4040
</releases>
@@ -46,7 +46,7 @@ under the License.
4646
<pluginRepositories>
4747
<pluginRepository>
4848
<id>local.central</id>
49-
<url>http://local.central</url>
49+
<url>http://localhost</url>
5050
<releases>
5151
<enabled>true</enabled>
5252
</releases>

mrm-maven-plugin/src/main/java/org/codehaus/mojo/mrm/maven/ProxyArtifactStore.java

Lines changed: 81 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,40 @@
2020
import java.io.IOException;
2121
import java.io.InputStream;
2222
import java.nio.file.Files;
23-
import java.util.*;
23+
import java.util.ArrayList;
24+
import java.util.Arrays;
25+
import java.util.Collections;
26+
import java.util.HashMap;
27+
import java.util.LinkedList;
28+
import java.util.List;
29+
import java.util.Map;
30+
import java.util.Objects;
31+
import java.util.Set;
2432
import java.util.stream.Collectors;
2533
import java.util.stream.Stream;
2634

2735
import org.apache.commons.lang.StringUtils;
2836
import org.apache.maven.archetype.ArchetypeManager;
2937
import org.apache.maven.archetype.catalog.ArchetypeCatalog;
30-
import org.apache.maven.artifact.repository.ArtifactRepository;
31-
import org.apache.maven.artifact.repository.metadata.*;
32-
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
33-
import org.apache.maven.artifact.versioning.VersionRange;
38+
import org.apache.maven.artifact.repository.metadata.Metadata;
39+
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
3440
import org.apache.maven.execution.MavenSession;
3541
import org.apache.maven.plugin.AbstractMojo;
3642
import org.apache.maven.plugin.logging.Log;
3743
import org.codehaus.mojo.mrm.api.ResolverUtils;
38-
import org.codehaus.mojo.mrm.api.maven.*;
44+
import org.codehaus.mojo.mrm.api.maven.ArchetypeCatalogNotFoundException;
45+
import org.codehaus.mojo.mrm.api.maven.Artifact;
46+
import org.codehaus.mojo.mrm.api.maven.ArtifactNotFoundException;
47+
import org.codehaus.mojo.mrm.api.maven.BaseArtifactStore;
48+
import org.codehaus.mojo.mrm.api.maven.MetadataNotFoundException;
3949
import org.codehaus.mojo.mrm.plugin.FactoryHelper;
50+
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
4051
import org.eclipse.aether.RepositorySystem;
52+
import org.eclipse.aether.metadata.DefaultMetadata;
4153
import org.eclipse.aether.repository.RemoteRepository;
4254
import org.eclipse.aether.resolution.ArtifactRequest;
55+
import org.eclipse.aether.resolution.MetadataRequest;
56+
import org.eclipse.aether.resolution.MetadataResult;
4357

4458
import static java.util.Optional.ofNullable;
4559

@@ -50,21 +64,11 @@ public class ProxyArtifactStore extends BaseArtifactStore {
5064

5165
private final List<RemoteRepository> remoteRepositories;
5266

53-
/**
54-
* The remote repositories that we will query.
55-
*/
56-
private final List<ArtifactRepository> artifactRepositories;
57-
5867
/**
5968
* The {@link Log} to log to.
6069
*/
6170
private final Log log;
6271

63-
/**
64-
* A version range that matches any version
65-
*/
66-
private static final VersionRange ANY_VERSION;
67-
6872
/**
6973
* A cache of what artifacts are present.
7074
*/
@@ -74,17 +78,6 @@ public class ProxyArtifactStore extends BaseArtifactStore {
7478

7579
private final MavenSession session;
7680

77-
static {
78-
try {
79-
ANY_VERSION = VersionRange.createFromVersionSpec("[0,]");
80-
} catch (InvalidVersionSpecificationException e) {
81-
// must never happen... so if it does make sure we stop
82-
throw new IllegalStateException("[0,] should always be a valid version specification", e);
83-
}
84-
}
85-
86-
private final RepositoryMetadataManager repositoryMetadataManager;
87-
8881
private final ArchetypeManager archetypeManager;
8982

9083
/**
@@ -96,16 +89,10 @@ public class ProxyArtifactStore extends BaseArtifactStore {
9689
*/
9790
public ProxyArtifactStore(FactoryHelper factoryHelper, MavenSession session, Log log) {
9891
this.repositorySystem = Objects.requireNonNull(factoryHelper.getRepositorySystem());
99-
this.repositoryMetadataManager = Objects.requireNonNull(factoryHelper.getRepositoryMetadataManager());
10092
this.archetypeManager = Objects.requireNonNull(factoryHelper.getArchetypeManager());
10193
this.log = log;
10294
this.session = Objects.requireNonNull(session);
10395

104-
artifactRepositories = Stream.concat(
105-
session.getCurrentProject().getRemoteArtifactRepositories().stream(),
106-
session.getCurrentProject().getPluginArtifactRepositories().stream())
107-
.distinct()
108-
.collect(Collectors.toList());
10996
remoteRepositories = Stream.concat(
11097
session.getCurrentProject().getRemoteProjectRepositories().stream(),
11198
session.getCurrentProject().getRemotePluginRepositories().stream())
@@ -242,49 +229,76 @@ public void set(Artifact artifact, InputStream content) {
242229

243230
@Override
244231
public Metadata getMetadata(String path) throws MetadataNotFoundException {
245-
path = StringUtils.strip(path, "/");
246-
Metadata metadata = new Metadata();
247-
boolean foundSomething = false;
248-
249-
// is this path a groupId:artifactId pair?
250-
int slashIndex = path.lastIndexOf('/');
251-
String artifactId = slashIndex == -1 ? null : path.substring(slashIndex + 1);
252-
String groupId = slashIndex == -1 ? null : path.substring(0, slashIndex).replace('/', '.');
253-
if (!StringUtils.isEmpty(artifactId) && !StringUtils.isEmpty(groupId)) {
254-
org.apache.maven.artifact.Artifact artifact = createDependencyArtifact(groupId, artifactId);
255-
ArtifactRepositoryMetadata artifactRepositoryMetadata = new ArtifactRepositoryMetadata(artifact);
256-
try {
257-
repositoryMetadataManager.resolve(
258-
artifactRepositoryMetadata, artifactRepositories, session.getLocalRepository());
259-
260-
final Metadata artifactMetadata = artifactRepositoryMetadata.getMetadata();
261-
if (artifactMetadata.getVersioning() != null) {
262-
foundSomething = true;
263-
if (StringUtils.isEmpty(metadata.getGroupId())) {
264-
metadata.setGroupId(groupId);
265-
metadata.setArtifactId(artifactId);
266-
}
267-
metadata.merge(artifactMetadata);
268-
for (String v : artifactMetadata.getVersioning().getVersions()) {
269-
addResolved(path + "/" + v);
270-
}
232+
LinkedList<String> pathItems =
233+
new LinkedList<>(Arrays.asList(StringUtils.strip(path, "/").split("/")));
234+
235+
String version;
236+
String artifactId;
237+
String groupId;
238+
239+
org.eclipse.aether.metadata.Metadata.Nature metadataNature;
240+
241+
if (pathItems.getLast().endsWith("-SNAPSHOT")) {
242+
// V level metadata request
243+
if (pathItems.size() < 3) {
244+
// at least we need G:A:V
245+
throw new MetadataNotFoundException(path);
246+
}
247+
metadataNature = org.eclipse.aether.metadata.Metadata.Nature.SNAPSHOT;
248+
version = pathItems.pollLast();
249+
artifactId = pathItems.pollLast();
250+
} else {
251+
// A or G level metadata request
252+
metadataNature = org.eclipse.aether.metadata.Metadata.Nature.RELEASE_OR_SNAPSHOT;
253+
version = null;
254+
artifactId = null;
255+
}
256+
257+
groupId = String.join(".", pathItems);
258+
259+
org.eclipse.aether.metadata.Metadata requestedMetadata =
260+
new DefaultMetadata(groupId, artifactId, version, "maven-metadata.xml", metadataNature);
261+
List<MetadataRequest> requests = new ArrayList<>();
262+
for (RemoteRepository repo : remoteRepositories) {
263+
MetadataRequest request = new MetadataRequest();
264+
request.setMetadata(requestedMetadata);
265+
request.setRepository(repo);
266+
requests.add(request);
267+
}
268+
269+
List<MetadataResult> metadataResults =
270+
repositorySystem.resolveMetadata(session.getRepositorySession(), requests);
271+
272+
Metadata resultMetadata = null;
273+
for (MetadataResult result : metadataResults) {
274+
if (!result.isResolved()) {
275+
continue;
276+
}
277+
Metadata metadata = readMetadata(result.getMetadata().getFile());
278+
if (metadata != null) {
279+
if (resultMetadata == null) {
280+
resultMetadata = metadata;
281+
} else {
282+
resultMetadata.merge(metadata);
271283
}
272-
} catch (RepositoryMetadataResolutionException e) {
273-
log.debug(e);
274284
}
275285
}
276286

277-
if (!foundSomething) {
287+
if (resultMetadata == null) {
278288
throw new MetadataNotFoundException(path);
279289
}
290+
280291
addResolved(path);
281-
return metadata;
292+
return resultMetadata;
282293
}
283294

284-
private org.apache.maven.artifact.Artifact createDependencyArtifact(String groupId, String artifactId) {
285-
286-
return new org.apache.maven.artifact.DefaultArtifact(
287-
groupId, artifactId, ANY_VERSION, "compile", "pom", "", null);
295+
private Metadata readMetadata(File file) {
296+
try (InputStream in = Files.newInputStream(file.toPath())) {
297+
return new MetadataXpp3Reader().read(in);
298+
} catch (IOException | XmlPullParserException e) {
299+
log.warn("Error reading metadata from file: " + file, e);
300+
}
301+
return null;
288302
}
289303

290304
@Override

mrm-maven-plugin/src/main/java/org/codehaus/mojo/mrm/plugin/DefaultFactoryHelper.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import javax.inject.Singleton;
66

77
import org.apache.maven.archetype.ArchetypeManager;
8-
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
98
import org.eclipse.aether.RepositorySystem;
109

1110
/**
@@ -18,17 +17,11 @@
1817
public class DefaultFactoryHelper implements FactoryHelper {
1918
private RepositorySystem repositorySystem;
2019

21-
private RepositoryMetadataManager repositoryMetadataManager;
22-
2320
private ArchetypeManager archetypeManager;
2421

2522
@Inject
26-
public DefaultFactoryHelper(
27-
RepositorySystem repositorySystem,
28-
RepositoryMetadataManager repositoryMetadataManager,
29-
ArchetypeManager archetypeManager) {
23+
public DefaultFactoryHelper(RepositorySystem repositorySystem, ArchetypeManager archetypeManager) {
3024
this.repositorySystem = repositorySystem;
31-
this.repositoryMetadataManager = repositoryMetadataManager;
3225
this.archetypeManager = archetypeManager;
3326
}
3427

@@ -37,11 +30,6 @@ public RepositorySystem getRepositorySystem() {
3730
return repositorySystem;
3831
}
3932

40-
@Override
41-
public RepositoryMetadataManager getRepositoryMetadataManager() {
42-
return repositoryMetadataManager;
43-
}
44-
4533
@Override
4634
public ArchetypeManager getArchetypeManager() {
4735
return archetypeManager;

mrm-maven-plugin/src/test/java/org/codehaus/mojo/mrm/maven/ProxyArtifactStoreTest.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.Collections;
2323

2424
import org.apache.maven.archetype.ArchetypeManager;
25-
import org.apache.maven.artifact.repository.metadata.RepositoryMetadataManager;
2625
import org.apache.maven.execution.MavenSession;
2726
import org.apache.maven.project.MavenProject;
2827
import org.codehaus.mojo.mrm.api.maven.Artifact;
@@ -63,7 +62,6 @@ void verifyArtifactNotFoundExceptionOnGet() throws Exception {
6362
doThrow(ArtifactResolutionException.class).when(repositorySystem).resolveArtifact(any(), any());
6463
FactoryHelper factoryHelper = mock(FactoryHelper.class);
6564
when(factoryHelper.getRepositorySystem()).thenReturn(repositorySystem);
66-
when(factoryHelper.getRepositoryMetadataManager()).then(i -> mock(RepositoryMetadataManager.class));
6765
when(factoryHelper.getArchetypeManager()).then(i -> mock(ArchetypeManager.class));
6866

6967
ProxyArtifactStore store = new ProxyArtifactStore(factoryHelper, mavenSession, null);
@@ -79,7 +77,6 @@ void verifyArtifactResolutionExceptionOnGet() throws Exception {
7977
doThrow(new RuntimeException("test123")).when(repositorySystem).resolveArtifact(any(), any());
8078
FactoryHelper factoryHelper = mock(FactoryHelper.class);
8179
when(factoryHelper.getRepositorySystem()).thenReturn(repositorySystem);
82-
when(factoryHelper.getRepositoryMetadataManager()).then(i -> mock(RepositoryMetadataManager.class));
8380
when(factoryHelper.getArchetypeManager()).then(i -> mock(ArchetypeManager.class));
8481

8582
ProxyArtifactStore store = new ProxyArtifactStore(factoryHelper, mavenSession, null);
@@ -95,7 +92,6 @@ void verifyArchetypeCatalogNotFoundException() throws Exception {
9592
doThrow(new RuntimeException("test123")).when(archetypeManager).getLocalCatalog(any());
9693
FactoryHelper factoryHelper = mock(FactoryHelper.class);
9794
when(factoryHelper.getRepositorySystem()).then(i -> mock(RepositorySystem.class));
98-
when(factoryHelper.getRepositoryMetadataManager()).then(i -> mock(RepositoryMetadataManager.class));
9995
when(factoryHelper.getArchetypeManager()).thenReturn(archetypeManager);
10096
ProxyArtifactStore store = new ProxyArtifactStore(factoryHelper, mavenSession, null);
10197

0 commit comments

Comments
 (0)