mirror of https://github.com/apache/maven.git
[MNG-7959] User controlled relocations Addendum (#1349)
The "ban" was unfinished and wrong: what is actually needed is to have exception with proper explanation instead. --- https://issues.apache.org/jira/browse/MNG-7959
This commit is contained in:
parent
8001c30b69
commit
57effdd16e
|
@ -237,7 +237,7 @@ private Model loadPom(
|
|||
throw new ArtifactDescriptorException(result);
|
||||
}
|
||||
|
||||
Artifact relocatedArtifact = getRelocation(session, request, model);
|
||||
Artifact relocatedArtifact = getRelocation(session, result, model);
|
||||
if (relocatedArtifact != null) {
|
||||
result.addRelocation(a);
|
||||
a = relocatedArtifact;
|
||||
|
@ -259,10 +259,12 @@ private Properties toProperties(Map<String, String> dominant, Map<String, String
|
|||
return props;
|
||||
}
|
||||
|
||||
private Artifact getRelocation(RepositorySystemSession session, ArtifactDescriptorRequest request, Model model) {
|
||||
private Artifact getRelocation(
|
||||
RepositorySystemSession session, ArtifactDescriptorResult artifactDescriptorResult, Model model)
|
||||
throws ArtifactDescriptorException {
|
||||
Artifact result = null;
|
||||
for (MavenArtifactRelocationSource source : artifactRelocationSources.values()) {
|
||||
result = source.relocatedTarget(session, request, model);
|
||||
result = source.relocatedTarget(session, artifactDescriptorResult, model);
|
||||
if (result != null) {
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -21,7 +21,8 @@
|
|||
import org.apache.maven.model.Model;
|
||||
import org.eclipse.aether.RepositorySystemSession;
|
||||
import org.eclipse.aether.artifact.Artifact;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorException;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorResult;
|
||||
|
||||
/**
|
||||
* Maven relocation source.
|
||||
|
@ -33,9 +34,10 @@ public interface MavenArtifactRelocationSource {
|
|||
* Returns {@link Artifact} instance where to relocate to, or {@code null}.
|
||||
*
|
||||
* @param session The session, never {@code null}.
|
||||
* @param request The artifact descriptor request, never {@code null}.
|
||||
* @param result The artifact descriptor result, never {@code null}.
|
||||
* @param model The artifact model, never {@code null}.
|
||||
* @return The {@link Artifact} to relocate to, or {@code null} if no relocation wanted.
|
||||
*/
|
||||
Artifact relocatedTarget(RepositorySystemSession session, ArtifactDescriptorRequest request, Model model);
|
||||
Artifact relocatedTarget(RepositorySystemSession session, ArtifactDescriptorResult result, Model model)
|
||||
throws ArtifactDescriptorException;
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
import org.apache.maven.repository.internal.RelocatedArtifact;
|
||||
import org.eclipse.aether.RepositorySystemSession;
|
||||
import org.eclipse.aether.artifact.Artifact;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorResult;
|
||||
import org.eclipse.sisu.Priority;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -49,13 +49,14 @@ public final class DistributionManagementArtifactRelocationSource implements Mav
|
|||
private static final Logger LOGGER = LoggerFactory.getLogger(DistributionManagementArtifactRelocationSource.class);
|
||||
|
||||
@Override
|
||||
public Artifact relocatedTarget(RepositorySystemSession session, ArtifactDescriptorRequest request, Model model) {
|
||||
public Artifact relocatedTarget(
|
||||
RepositorySystemSession session, ArtifactDescriptorResult artifactDescriptorResult, Model model) {
|
||||
DistributionManagement distMgmt = model.getDistributionManagement();
|
||||
if (distMgmt != null) {
|
||||
Relocation relocation = distMgmt.getRelocation();
|
||||
if (relocation != null) {
|
||||
Artifact result = new RelocatedArtifact(
|
||||
request.getArtifact(),
|
||||
artifactDescriptorResult.getRequest().getArtifact(),
|
||||
relocation.getGroupId(),
|
||||
relocation.getArtifactId(),
|
||||
null,
|
||||
|
@ -64,7 +65,7 @@ public Artifact relocatedTarget(RepositorySystemSession session, ArtifactDescrip
|
|||
relocation.getMessage());
|
||||
LOGGER.debug(
|
||||
"The artifact {} has been relocated to {}: {}",
|
||||
request.getArtifact(),
|
||||
artifactDescriptorResult.getRequest().getArtifact(),
|
||||
result,
|
||||
relocation.getMessage());
|
||||
return result;
|
||||
|
|
|
@ -34,7 +34,8 @@
|
|||
import org.eclipse.aether.RepositorySystemSession;
|
||||
import org.eclipse.aether.artifact.Artifact;
|
||||
import org.eclipse.aether.artifact.DefaultArtifact;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorException;
|
||||
import org.eclipse.aether.resolution.ArtifactDescriptorResult;
|
||||
import org.eclipse.sisu.Priority;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -53,15 +54,28 @@ public final class UserPropertiesArtifactRelocationSource implements MavenArtifa
|
|||
|
||||
private static final String CONFIG_PROP_RELOCATIONS_ENTRIES = "maven.relocations.entries";
|
||||
|
||||
private static final Artifact SENTINEL = new DefaultArtifact("org.apache.maven.banned:user-relocation:1.0");
|
||||
|
||||
@Override
|
||||
public Artifact relocatedTarget(RepositorySystemSession session, ArtifactDescriptorRequest request, Model model) {
|
||||
public Artifact relocatedTarget(
|
||||
RepositorySystemSession session, ArtifactDescriptorResult artifactDescriptorResult, Model model)
|
||||
throws ArtifactDescriptorException {
|
||||
Relocations relocations = (Relocations) session.getData()
|
||||
.computeIfAbsent(getClass().getName() + ".relocations", () -> parseRelocations(session));
|
||||
if (relocations != null) {
|
||||
Relocation relocation = relocations.getRelocation(request.getArtifact());
|
||||
if (relocation != null && (isProjectContext(request.getRequestContext()) || relocation.global)) {
|
||||
Artifact original = artifactDescriptorResult.getRequest().getArtifact();
|
||||
Relocation relocation = relocations.getRelocation(original);
|
||||
if (relocation != null
|
||||
&& (isProjectContext(artifactDescriptorResult.getRequest().getRequestContext())
|
||||
|| relocation.global)) {
|
||||
if (relocation.target == SENTINEL) {
|
||||
String message = "The artifact " + original + " has been banned from resolution: "
|
||||
+ (relocation.global ? "User global ban" : "User project ban");
|
||||
LOGGER.debug(message);
|
||||
throw new ArtifactDescriptorException(artifactDescriptorResult, message);
|
||||
}
|
||||
Artifact result = new RelocatedArtifact(
|
||||
request.getArtifact(),
|
||||
original,
|
||||
isAny(relocation.target.getGroupId()) ? null : relocation.target.getGroupId(),
|
||||
isAny(relocation.target.getArtifactId()) ? null : relocation.target.getArtifactId(),
|
||||
isAny(relocation.target.getClassifier()) ? null : relocation.target.getClassifier(),
|
||||
|
@ -70,7 +84,7 @@ public Artifact relocatedTarget(RepositorySystemSession session, ArtifactDescrip
|
|||
relocation.global ? "User global relocation" : "User project relocation");
|
||||
LOGGER.debug(
|
||||
"The artifact {} has been relocated to {}: {}",
|
||||
request.getArtifact(),
|
||||
original,
|
||||
result,
|
||||
relocation.global ? "User global relocation" : "User project relocation");
|
||||
return result;
|
||||
|
@ -169,7 +183,7 @@ private Relocations parseRelocations(RepositorySystemSession session) {
|
|||
if (parts.length > 1) {
|
||||
t = parseArtifact(parts[1]);
|
||||
} else {
|
||||
t = new DefaultArtifact("org.apache.maven.banned:user-relocation:1.0");
|
||||
t = SENTINEL;
|
||||
}
|
||||
return new Relocation(global, s, t);
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue