From f2c93eec5080b0b5b148c2e1abc8571f951111c4 Mon Sep 17 00:00:00 2001 From: "Brian M. Long" Date: Sun, 20 Aug 2023 12:03:15 -0400 Subject: [PATCH] added version range config support --- pom.xml | 2 +- .../maven/ban/AbstractBanConfiguration.java | 38 ++++++++++++++----- .../maven/ban/BanConfigurationDownloader.java | 9 +++-- .../maven/ban/BanConfigurationParser.java | 5 ++- .../com/inteligr8/maven/ban/BanExtension.java | 6 ++- .../inteligr8/maven/ban/PurgeRepoMojo.java | 6 ++- 6 files changed, 48 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index 855902d..11b50e4 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.inteligr8 ban-maven-plugin - 1.0-SNAPSHOT + 1.3-SNAPSHOT maven-plugin Ban Dependencies Maven Plugin diff --git a/src/main/java/com/inteligr8/maven/ban/AbstractBanConfiguration.java b/src/main/java/com/inteligr8/maven/ban/AbstractBanConfiguration.java index 14d7753..29bddea 100644 --- a/src/main/java/com/inteligr8/maven/ban/AbstractBanConfiguration.java +++ b/src/main/java/com/inteligr8/maven/ban/AbstractBanConfiguration.java @@ -30,9 +30,14 @@ import org.codehaus.plexus.util.xml.Xpp3Dom; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.impl.ArtifactResolver; +import org.eclipse.aether.impl.VersionRangeResolver; import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResolutionException; import org.eclipse.aether.resolution.ArtifactResult; +import org.eclipse.aether.resolution.VersionRangeRequest; +import org.eclipse.aether.resolution.VersionRangeResolutionException; +import org.eclipse.aether.resolution.VersionRangeResult; +import org.eclipse.aether.version.Version; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,13 +51,15 @@ public abstract class AbstractBanConfiguration implements BanConfiguration { protected final List includeArtifacts = new LinkedList<>(); protected final List excludeArtifacts = new LinkedList<>(); - + private final ArtifactResolver artifactResolver; + private final VersionRangeResolver versionRangeResolver; private final MavenSession session; - public AbstractBanConfiguration(MavenSession session, ArtifactResolver artifactResolver) { + public AbstractBanConfiguration(MavenSession session, ArtifactResolver artifactResolver, VersionRangeResolver versionRangeResolver) { this.session = session; this.artifactResolver = artifactResolver; + this.versionRangeResolver = versionRangeResolver; } public void init(Xpp3Dom rootDom) throws IOException, MojoFailureException { @@ -70,19 +77,32 @@ public abstract class AbstractBanConfiguration implements BanConfiguration { BanConfigurationDownloader downloader = null; if (child.getName().equals("url")) { String url = StringUtils.trimToNull(child.getValue()); - downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, url); + downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, this.versionRangeResolver, url); } else if (child.getName().equals("artifact")) { Artifact artifact = new DefaultArtifact(child.getValue()); if (!"xml".equals(artifact.getExtension())) artifact = new DefaultArtifact(artifact.getGroupId(), artifact.getArtifactId(), artifact.getClassifier(), "xml", artifact.getVersion()); - ArtifactRequest request = new ArtifactRequest(artifact, this.session.getCurrentProject().getRemoteProjectRepositories(), null); + VersionRangeRequest vrrequest = new VersionRangeRequest(artifact, this.session.getCurrentProject().getRemoteProjectRepositories(), null); try { - ArtifactResult result = this.artifactResolver.resolveArtifact(this.session.getRepositorySession(), request); - File file = result.getArtifact().getFile(); - downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, file); - } catch (ArtifactResolutionException are) { - this.logger.warn("The artifact could not be resolved; skipping: {}", child.getValue()); + VersionRangeResult vrresult = this.versionRangeResolver.resolveVersionRange(this.session.getRepositorySession(), vrrequest); + if (vrresult.getVersions().isEmpty()) { + this.logger.error("The artifact version range could not be resolved; skipping: {}", child.getValue()); + } else { + Version version = vrresult.getHighestVersion(); + artifact.setVersion(version.toString()); + + ArtifactRequest arequest = new ArtifactRequest(artifact, this.session.getCurrentProject().getRemoteProjectRepositories(), null); + try { + ArtifactResult aresult = this.artifactResolver.resolveArtifact(this.session.getRepositorySession(), arequest); + File file = aresult.getArtifact().getFile(); + downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, this.versionRangeResolver, file); + } catch (ArtifactResolutionException are) { + this.logger.warn("The artifact version could not be resolved; skipping: {} | {}", child.getValue(), version); + } + } + } catch (VersionRangeResolutionException vrre) { + this.logger.error("The artifact version range could not be resolved; skipping: {}", child.getValue()); } } diff --git a/src/main/java/com/inteligr8/maven/ban/BanConfigurationDownloader.java b/src/main/java/com/inteligr8/maven/ban/BanConfigurationDownloader.java index 82bb5a7..ff55ce3 100644 --- a/src/main/java/com/inteligr8/maven/ban/BanConfigurationDownloader.java +++ b/src/main/java/com/inteligr8/maven/ban/BanConfigurationDownloader.java @@ -27,6 +27,7 @@ import org.codehaus.plexus.util.xml.Xpp3Dom; import org.codehaus.plexus.util.xml.Xpp3DomBuilder; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.eclipse.aether.impl.ArtifactResolver; +import org.eclipse.aether.impl.VersionRangeResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,8 +35,8 @@ public class BanConfigurationDownloader extends AbstractBanConfiguration { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - public BanConfigurationDownloader(MavenSession session, ArtifactResolver artifactResolver, String url) throws IOException, MojoFailureException { - super(session, artifactResolver); + public BanConfigurationDownloader(MavenSession session, ArtifactResolver artifactResolver, VersionRangeResolver versionRangeResolver, String url) throws IOException, MojoFailureException { + super(session, artifactResolver, versionRangeResolver); try { Xpp3Dom rootDom = this.load(new URL(url)); @@ -45,8 +46,8 @@ public class BanConfigurationDownloader extends AbstractBanConfiguration { } } - public BanConfigurationDownloader(MavenSession session, ArtifactResolver artifactResolver, File file) throws IOException, MojoFailureException { - super(session, artifactResolver); + public BanConfigurationDownloader(MavenSession session, ArtifactResolver artifactResolver, VersionRangeResolver versionRangeResolver, File file) throws IOException, MojoFailureException { + super(session, artifactResolver, versionRangeResolver); try { Xpp3Dom rootDom = this.load(file); diff --git a/src/main/java/com/inteligr8/maven/ban/BanConfigurationParser.java b/src/main/java/com/inteligr8/maven/ban/BanConfigurationParser.java index 9b89d56..a9646df 100644 --- a/src/main/java/com/inteligr8/maven/ban/BanConfigurationParser.java +++ b/src/main/java/com/inteligr8/maven/ban/BanConfigurationParser.java @@ -21,11 +21,12 @@ import org.apache.maven.model.Plugin; import org.apache.maven.plugin.MojoFailureException; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.eclipse.aether.impl.ArtifactResolver; +import org.eclipse.aether.impl.VersionRangeResolver; public class BanConfigurationParser extends AbstractBanConfiguration { - public BanConfigurationParser(MavenSession session, ArtifactResolver artifactResolver, Plugin plugin) throws IOException, MojoFailureException { - super(session, artifactResolver); + public BanConfigurationParser(MavenSession session, ArtifactResolver artifactResolver, VersionRangeResolver versionRangeResolver, Plugin plugin) throws IOException, MojoFailureException { + super(session, artifactResolver, versionRangeResolver); Xpp3Dom rootDom = (Xpp3Dom) plugin.getConfiguration(); this.init(rootDom); diff --git a/src/main/java/com/inteligr8/maven/ban/BanExtension.java b/src/main/java/com/inteligr8/maven/ban/BanExtension.java index 3090b57..b2133d7 100644 --- a/src/main/java/com/inteligr8/maven/ban/BanExtension.java +++ b/src/main/java/com/inteligr8/maven/ban/BanExtension.java @@ -40,6 +40,7 @@ import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.DependencyFilter; import org.eclipse.aether.graph.DependencyNode; import org.eclipse.aether.impl.ArtifactResolver; +import org.eclipse.aether.impl.VersionRangeResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,6 +57,9 @@ public class BanExtension extends AbstractMavenLifecycleParticipant { @Inject private ArtifactResolver artifactResolver; + @Inject + private VersionRangeResolver versionRangeResolver; + @Inject private ProjectDependenciesResolver projDepResolver; @@ -113,7 +117,7 @@ public class BanExtension extends AbstractMavenLifecycleParticipant { return null; } else { try { - return new BanConfigurationParser(session, this.artifactResolver, plugin); + return new BanConfigurationParser(session, this.artifactResolver, this.versionRangeResolver, plugin); } catch (IOException | MojoFailureException e) { throw new MavenExecutionException(e.getMessage(), project.getFile()); } diff --git a/src/main/java/com/inteligr8/maven/ban/PurgeRepoMojo.java b/src/main/java/com/inteligr8/maven/ban/PurgeRepoMojo.java index 2ba8e9e..29eb45b 100644 --- a/src/main/java/com/inteligr8/maven/ban/PurgeRepoMojo.java +++ b/src/main/java/com/inteligr8/maven/ban/PurgeRepoMojo.java @@ -46,6 +46,7 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.component.annotations.Component; import org.eclipse.aether.impl.ArtifactResolver; +import org.eclipse.aether.impl.VersionRangeResolver; import com.inteligr8.maven.model.ArtifactFilter; @@ -59,6 +60,9 @@ public class PurgeRepoMojo extends AbstractMojo { @Inject private ArtifactResolver artifactResolver; + @Inject + private VersionRangeResolver versionRangeResolver; + @Parameter(name = "skip", defaultValue = "false") private boolean skip = false; @@ -172,7 +176,7 @@ public class PurgeRepoMojo extends AbstractMojo { Plugin plugin = project.getPlugin(BanExtension.THIS_PLUGIN_KEY); if (plugin == null) throw new MojoFailureException("The plugin is executing but it cannot be found"); - return new BanConfigurationParser(this.session, this.artifactResolver, plugin); + return new BanConfigurationParser(this.session, this.artifactResolver, this.versionRangeResolver, plugin); } private Path resolveGroupPath(ArtifactFilter afilter) {