19 Commits

Author SHA1 Message Date
034b319172 v1.3.6 pom 2024-08-21 15:39:43 -04:00
65009df10b Merge branch 'develop' into stable 2024-08-21 15:39:27 -04:00
8df2d5bd03 added Mojo annotations for config to prevent warnings 2024-08-21 15:39:13 -04:00
0edac4fc37 v1.3.5 pom 2023-08-21 15:33:12 -04:00
f837e5d1c0 Merge branch 'develop' into stable 2023-08-21 15:32:38 -04:00
78e34d85e9 added logging 2023-08-21 15:32:31 -04:00
6e2a701c0d fixed artifact/version detection 2023-08-21 15:30:51 -04:00
08498d4224 v1.3.4 pom 2023-08-20 16:56:20 -04:00
1c7997d85c Merge branch 'develop' into stable 2023-08-20 16:56:04 -04:00
9116d4bfd9 less warnings for non-empty directories during purge 2023-08-20 16:55:54 -04:00
9874ed9543 v1.3.3 pom 2023-08-20 15:03:10 -04:00
eeb7a84698 Merge branch 'develop' into stable 2023-08-20 15:02:58 -04:00
ca8913e558 don't delete pom metadata 2023-08-20 15:02:50 -04:00
4c1c4d412d v1.3.2 pom 2023-08-20 13:34:37 -04:00
fc5e0c6bd1 Merge branch 'develop' into stable 2023-08-20 13:32:59 -04:00
2a1523012b prevent sub-group matching for purge 2023-08-20 13:32:46 -04:00
d41d73fa1c v1.3.1 pom 2023-08-20 12:59:23 -04:00
a9aa47d412 Merge branch 'develop' into stable 2023-08-20 12:58:55 -04:00
47fd07247d fix version range impl 2023-08-20 12:58:46 -04:00
6 changed files with 95 additions and 20 deletions

View File

@@ -7,7 +7,7 @@
<groupId>com.inteligr8</groupId> <groupId>com.inteligr8</groupId>
<artifactId>ban-maven-plugin</artifactId> <artifactId>ban-maven-plugin</artifactId>
<version>1.3.0</version> <version>1.3.6</version>
<packaging>maven-plugin</packaging> <packaging>maven-plugin</packaging>
<name>Ban Dependencies Maven Plugin</name> <name>Ban Dependencies Maven Plugin</name>

View File

@@ -90,7 +90,7 @@ public abstract class AbstractBanConfiguration implements BanConfiguration {
this.logger.error("The artifact version range could not be resolved; skipping: {}", child.getValue()); this.logger.error("The artifact version range could not be resolved; skipping: {}", child.getValue());
} else { } else {
Version version = vrresult.getHighestVersion(); Version version = vrresult.getHighestVersion();
artifact.setVersion(version.toString()); artifact = artifact.setVersion(version.toString());
ArtifactRequest arequest = new ArtifactRequest(artifact, this.session.getCurrentProject().getRemoteProjectRepositories(), null); ArtifactRequest arequest = new ArtifactRequest(artifact, this.session.getCurrentProject().getRemoteProjectRepositories(), null);
try { try {
@@ -98,7 +98,7 @@ public abstract class AbstractBanConfiguration implements BanConfiguration {
File file = aresult.getArtifact().getFile(); File file = aresult.getArtifact().getFile();
downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, this.versionRangeResolver, file); downloader = new BanConfigurationDownloader(this.session, this.artifactResolver, this.versionRangeResolver, file);
} catch (ArtifactResolutionException are) { } catch (ArtifactResolutionException are) {
this.logger.warn("The artifact version could not be resolved; skipping: {} | {}", child.getValue(), version); this.logger.warn("The artifact version could not be resolved; skipping: {}", artifact, version);
} }
} }
} catch (VersionRangeResolutionException vrre) { } catch (VersionRangeResolutionException vrre) {

View File

@@ -29,6 +29,7 @@ import org.apache.maven.model.Plugin;
import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.PluginResolutionException; import org.apache.maven.plugin.PluginResolutionException;
import org.apache.maven.plugin.internal.PluginDependenciesResolver; import org.apache.maven.plugin.internal.PluginDependenciesResolver;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.DefaultDependencyResolutionRequest; import org.apache.maven.project.DefaultDependencyResolutionRequest;
import org.apache.maven.project.DependencyResolutionException; import org.apache.maven.project.DependencyResolutionException;
import org.apache.maven.project.DependencyResolutionResult; import org.apache.maven.project.DependencyResolutionResult;
@@ -44,6 +45,8 @@ import org.eclipse.aether.impl.VersionRangeResolver;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.inteligr8.maven.ban.model.ImportConfig;
@Named("ban") @Named("ban")
@Singleton @Singleton
public class BanExtension extends AbstractMavenLifecycleParticipant { public class BanExtension extends AbstractMavenLifecycleParticipant {
@@ -65,6 +68,18 @@ public class BanExtension extends AbstractMavenLifecycleParticipant {
@Inject @Inject
private PluginDependenciesResolver pluginDepResolver; private PluginDependenciesResolver pluginDepResolver;
/**
* The configuration is parsed manually. This is here to prevent warning messages with IDEs and builders.
*/
@Parameter(name = "import")
private ImportConfig importConfig;
@Parameter(name = "includes")
private List<String> includes;
@Parameter(name = "excludes")
private List<String> excludes;
@Override @Override
public void afterProjectsRead(MavenSession session) throws MavenExecutionException { public void afterProjectsRead(MavenSession session) throws MavenExecutionException {

View File

@@ -16,6 +16,7 @@ package com.inteligr8.maven.ban;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.DirectoryNotEmptyException;
import java.nio.file.FileVisitResult; import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor; import java.nio.file.FileVisitor;
import java.nio.file.Files; import java.nio.file.Files;
@@ -158,14 +159,14 @@ public class PurgeRepoMojo extends AbstractMojo {
this.getLog().info("DRYRUN: Would have deleted certain paths from local Maven cache: " + repoPath); this.getLog().info("DRYRUN: Would have deleted certain paths from local Maven cache: " + repoPath);
this.getLog().info("DRYRUN: Would have deleted these paths: " + includePaths); this.getLog().info("DRYRUN: Would have deleted these paths: " + includePaths);
} else { } else {
for (Path path : includePaths) { for (Path versionPath : includePaths) {
Path fullpath = repoPath.resolve(path); Path fullVersionPath = repoPath.resolve(versionPath);
if (Files.exists(fullpath)) { if (Files.exists(fullVersionPath)) {
this.getLog().info("Deleting version from Maven cache: " + path); this.getLog().info("Deleting version from Maven cache: " + versionPath);
Files.walkFileTree(fullpath, new DeleteDirectoryVisitor()); Files.walkFileTree(fullVersionPath, new DeleteNonMetadataVisitor());
} else { } else {
// this will probably never happen // this will probably never happen
this.getLog().debug("Maven cache does not exist: " + path); this.getLog().debug("Maven cache does not exist: " + versionPath);
} }
} }
} }
@@ -219,14 +220,27 @@ public class PurgeRepoMojo extends AbstractMojo {
Files.list(repoPath.resolve(groupPath)).forEach(new Consumer<Path>() { Files.list(repoPath.resolve(groupPath)).forEach(new Consumer<Path>() {
@Override @Override
public void accept(Path t) { public void accept(Path fullArtifactPath) {
if (artifactPattern == null) { if (artifactPattern == null) {
paths.add(repoPath.relativize(t)); // these may include sub-groups and not just artifacts
// which will lead to paths with artifacts as versions
// so we are looping through versions to see if it is indeed an artifact
try {
Files.list(fullArtifactPath).findFirst().ifPresent(new Consumer<Path>() {
@Override
public void accept(Path fullVersionPath) {
if (Files.exists(fullVersionPath.resolve("_remote.repositories")))
paths.add(repoPath.relativize(fullArtifactPath));
}
});
} catch (IOException ie) {
getLog().error(ie.getMessage(), ie);
}
} else { } else {
Matcher matcher = artifactPattern.matcher(t.getFileName().toString()); Matcher matcher = artifactPattern.matcher(fullArtifactPath.getFileName().toString());
if (matcher.matches()) { if (matcher.matches()) {
getLog().debug("The artifact directory '" + t.getFileName() + "' qualifies as included"); getLog().debug("The artifact directory '" + fullArtifactPath.getFileName() + "' qualifies as included");
paths.add(repoPath.relativize(t)); paths.add(repoPath.relativize(fullArtifactPath));
} }
} }
} }
@@ -266,7 +280,9 @@ public class PurgeRepoMojo extends AbstractMojo {
private class DeleteDirectoryVisitor implements FileVisitor<Path> { private class DeleteNonMetadataVisitor implements FileVisitor<Path> {
private final Pattern versionPathPattern = Pattern.compile("/([^/]+)/([^/]+)/[^/]+$");
@Override @Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
@@ -275,12 +291,33 @@ public class PurgeRepoMojo extends AbstractMojo {
@Override @Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
try { if (attrs.isDirectory()) {
if (!attrs.isDirectory()) getLog().warn("An unexpected directory was found: " + file);
return FileVisitResult.SKIP_SUBTREE;
}
Matcher matcher = this.versionPathPattern.matcher(file.toString());
if (!matcher.find()) {
getLog().debug("Ignoring file from purge: " + file);
return FileVisitResult.CONTINUE;
}
String artifactId = matcher.group(1);
String version = matcher.group(2);
String includeName = artifactId + "-" + version;
String excludeName = artifactId + "-" + version + ".pom";
getLog().debug("artifact-version: " + includeName);
if (file.getFileName().toString().startsWith(includeName) &&
!file.getFileName().toString().startsWith(excludeName)) {
try {
getLog().info("Deleting artifact: " + file);
Files.delete(file); Files.delete(file);
} catch (IOException ie) { } catch (IOException ie) {
getLog().debug(ie); getLog().debug(ie);
getLog().warn("The file failed to delete: " + file); getLog().warn("The file failed to delete: " + file);
return FileVisitResult.SKIP_SIBLINGS;
}
} }
return FileVisitResult.CONTINUE; return FileVisitResult.CONTINUE;
@@ -295,6 +332,8 @@ public class PurgeRepoMojo extends AbstractMojo {
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
try { try {
Files.delete(dir); Files.delete(dir);
} catch (DirectoryNotEmptyException dnee) {
getLog().debug("The folder will not be deleted as it is not empty: " + dir);
} catch (IOException ie) { } catch (IOException ie) {
getLog().debug(ie); getLog().debug(ie);
getLog().warn("The folder failed to delete: " + dir); getLog().warn("The folder failed to delete: " + dir);

View File

@@ -0,0 +1,11 @@
package com.inteligr8.maven.ban.model;
import java.util.List;
public class Config {
public ImportConfig importConfigs;
public List<String> includes;
public List<String> excludes;
}

View File

@@ -0,0 +1,10 @@
package com.inteligr8.maven.ban.model;
import java.util.List;
public class ImportConfig {
public List<String> url;
public List<String> artifact;
}