AbstractDependencyFilterMojo Class — spring-boot Architecture
Architecture documentation for the AbstractDependencyFilterMojo class in AbstractDependencyFilterMojo.java from the spring-boot codebase.
Entity Profile
Source Code
build-plugin/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/AbstractDependencyFilterMojo.java lines 47–198
public abstract class AbstractDependencyFilterMojo extends AbstractMojo {
static final ExcludeFilter DEVTOOLS_EXCLUDE_FILTER;
static {
Exclude exclude = new Exclude();
exclude.setGroupId("org.springframework.boot");
exclude.setArtifactId("spring-boot-devtools");
DEVTOOLS_EXCLUDE_FILTER = new ExcludeFilter(exclude);
}
static final ExcludeFilter DOCKER_COMPOSE_EXCLUDE_FILTER;
static {
Exclude exclude = new Exclude();
exclude.setGroupId("org.springframework.boot");
exclude.setArtifactId("spring-boot-docker-compose");
DOCKER_COMPOSE_EXCLUDE_FILTER = new ExcludeFilter(exclude);
}
/**
* The Maven project.
* @since 3.0.0
*/
@Parameter(defaultValue = "${project}", readonly = true, required = true)
@SuppressWarnings("NullAway.Init")
protected MavenProject project;
/**
* Collection of artifact definitions to include. The {@link Include} element defines
* mandatory {@code groupId} and {@code artifactId} components and an optional
* {@code classifier} component. When configured as a property, values should be
* comma-separated with colon-separated components:
* {@code groupId:artifactId,groupId:artifactId:classifier}
* @since 1.2.0
*/
@Parameter(property = "spring-boot.includes")
private @Nullable List<Include> includes;
/**
* Collection of artifact definitions to exclude. The {@link Exclude} element defines
* mandatory {@code groupId} and {@code artifactId} components and an optional
* {@code classifier} component. When configured as a property, values should be
* comma-separated with colon-separated components:
* {@code groupId:artifactId,groupId:artifactId:classifier}
* @since 1.1.0
*/
@Parameter(property = "spring-boot.excludes")
private @Nullable List<Exclude> excludes;
/**
* Comma separated list of groupId names to exclude (exact match).
* @since 1.1.0
*/
@Parameter(property = "spring-boot.excludeGroupIds", defaultValue = "")
private @Nullable String excludeGroupIds;
protected void setExcludes(@Nullable List<Exclude> excludes) {
this.excludes = excludes;
}
protected void setIncludes(@Nullable List<Include> includes) {
this.includes = includes;
}
protected void setExcludeGroupIds(String excludeGroupIds) {
this.excludeGroupIds = excludeGroupIds;
}
protected List<URL> getDependencyURLs(ArtifactsFilter... additionalFilters) throws MojoExecutionException {
Set<Artifact> artifacts = filterDependencies(this.project.getArtifacts(), additionalFilters);
List<URL> urls = new ArrayList<>();
for (Artifact artifact : artifacts) {
if (artifact.getFile() != null) {
urls.add(toURL(artifact.getFile()));
}
}
return urls;
}
protected final Set<Artifact> filterDependencies(Set<Artifact> dependencies, ArtifactsFilter... additionalFilters)
throws MojoExecutionException {
try {
Set<Artifact> filtered = new LinkedHashSet<>(dependencies);
filtered.retainAll(getFilters(additionalFilters).filter(dependencies));
return filtered;
}
catch (ArtifactFilterException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
}
}
protected URL toURL(File file) {
try {
return file.toURI().toURL();
}
catch (MalformedURLException ex) {
throw new IllegalStateException("Invalid URL for " + file, ex);
}
}
/**
* Return artifact filters configured for this MOJO.
* @param additionalFilters optional additional filters to apply
* @return the filters
*/
private FilterArtifacts getFilters(ArtifactsFilter... additionalFilters) {
FilterArtifacts filters = new FilterArtifacts();
for (ArtifactsFilter additionalFilter : additionalFilters) {
filters.addFilter(additionalFilter);
}
filters.addFilter(new MatchingGroupIdFilter(cleanFilterConfig(this.excludeGroupIds)));
if (this.includes != null && !this.includes.isEmpty()) {
filters.addFilter(new IncludeFilter(this.includes));
}
if (this.excludes != null && !this.excludes.isEmpty()) {
filters.addFilter(new ExcludeFilter(this.excludes));
}
filters.addFilter(new JarTypeFilter());
return filters;
}
private String cleanFilterConfig(@Nullable String content) {
if (content == null || content.trim().isEmpty()) {
return "";
}
StringBuilder cleaned = new StringBuilder();
StringTokenizer tokenizer = new StringTokenizer(content, ",");
while (tokenizer.hasMoreElements()) {
cleaned.append(tokenizer.nextToken().trim());
if (tokenizer.hasMoreElements()) {
cleaned.append(",");
}
}
return cleaned.toString();
}
/**
* {@link ArtifactFilter} to exclude test scope dependencies.
*/
protected static class ExcludeTestScopeArtifactFilter extends AbstractArtifactFeatureFilter {
ExcludeTestScopeArtifactFilter() {
super("", Artifact.SCOPE_TEST);
}
@Override
protected String getArtifactFeature(Artifact artifact) {
return artifact.getScope();
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free