This is an automated email from the ASF dual-hosted git repository.
cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-shade-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new eca6398 Bug: Extra JARs and Artifacts were not subjected to filtering
(#785)
eca6398 is described below
commit eca6398fd26db22a8f94da99682251ab85a758d8
Author: Tamas Cservenak <[email protected]>
AuthorDate: Thu Feb 26 15:12:35 2026 +0100
Bug: Extra JARs and Artifacts were not subjected to filtering (#785)
The `extraJars` and `extraArtifacts` were added to shaded JAR as is,
without subjecting them to filtering.
---
.../apache/maven/plugins/shade/mojo/ShadeMojo.java | 104 ++++++++++++---------
.../maven/plugins/shade/mojo/ShadeMojoTest.java | 4 +-
2 files changed, 60 insertions(+), 48 deletions(-)
diff --git a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
index 312c76a..0170cdf 100644
--- a/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
+++ b/src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java
@@ -508,7 +508,7 @@ public class ShadeMojo extends AbstractMojo {
}
}
- processArtifactSelectors(
+ List<Artifact> processedArtifacts = processArtifactSelectors(
artifacts, artifactIds, sourceArtifacts, testArtifacts,
testSourceArtifacts, artifactSelector);
File outputJar = (outputFile != null) ? outputFile :
shadedArtifactFileWithClassifier();
@@ -518,7 +518,7 @@ public class ShadeMojo extends AbstractMojo {
// Now add our extra resources
try {
- List<Filter> filters = getFilters();
+ List<Filter> filters = getFilters(processedArtifacts);
List<Relocator> relocators = getRelocators();
@@ -716,7 +716,7 @@ public class ShadeMojo extends AbstractMojo {
}
}
- private void processArtifactSelectors(
+ private List<Artifact> processArtifactSelectors(
Set<File> artifacts,
Set<String> artifactIds,
Set<File> sourceArtifacts,
@@ -725,11 +725,11 @@ public class ShadeMojo extends AbstractMojo {
ArtifactSelector artifactSelector)
throws MojoExecutionException {
- List<String> excludedArtifacts = new ArrayList<>();
- List<String> pomArtifacts = new ArrayList<>();
- List<String> emptySourceArtifacts = new ArrayList<>();
- List<String> emptyTestArtifacts = new ArrayList<>();
- List<String> emptyTestSourceArtifacts = new ArrayList<>();
+ List<Artifact> excludedArtifacts = new ArrayList<>();
+ List<Artifact> pomArtifacts = new ArrayList<>();
+ List<Artifact> emptySourceArtifacts = new ArrayList<>();
+ List<Artifact> emptyTestArtifacts = new ArrayList<>();
+ List<Artifact> emptyTestSourceArtifacts = new ArrayList<>();
ArrayList<Artifact> processedArtifacts = new ArrayList<>();
if (extraArtifacts != null && !extraArtifacts.isEmpty()) {
@@ -755,15 +755,15 @@ public class ShadeMojo extends AbstractMojo {
}
processedArtifacts.addAll(project.getArtifacts());
- for (Artifact artifact : processedArtifacts) {
+ // for loop over COPY; as we add to the list in this loop
+ for (Artifact artifact : new ArrayList<>(processedArtifacts)) {
if (!artifactSelector.isSelected(artifact)) {
- excludedArtifacts.add(artifact.getId());
-
+ excludedArtifacts.add(artifact);
continue;
}
if ("pom".equals(artifact.getType())) {
- pomArtifacts.add(artifact.getId());
+ pomArtifacts.add(artifact);
continue;
}
@@ -773,52 +773,62 @@ public class ShadeMojo extends AbstractMojo {
artifactIds.add(getId(artifact));
if (createSourcesJar) {
- File file = resolveArtifactForClassifier(artifact, "sources");
- if (file != null) {
- if (file.length() > 0) {
- sourceArtifacts.add(file);
+ Artifact sources = resolveArtifactForClassifier(artifact,
"sources");
+ if (sources != null) {
+ if (sources.getFile().length() > 0) {
+ sourceArtifacts.add(sources.getFile());
+ processedArtifacts.add(sources);
} else {
- emptySourceArtifacts.add(artifact.getArtifactId());
+ emptySourceArtifacts.add(artifact);
}
}
}
if (shadeTestJar) {
- File file = resolveArtifactForClassifier(artifact, "tests");
- if (file != null) {
- if (file.length() > 0) {
- testArtifacts.add(file);
+ Artifact tests = resolveArtifactForClassifier(artifact,
"tests");
+ if (tests != null) {
+ if (tests.getFile().length() > 0) {
+ testArtifacts.add(tests.getFile());
+ processedArtifacts.add(tests);
} else {
- emptyTestArtifacts.add(artifact.getId());
+ emptyTestArtifacts.add(artifact);
}
}
}
if (createTestSourcesJar) {
- File file = resolveArtifactForClassifier(artifact,
"test-sources");
- if (file != null) {
- testSourceArtifacts.add(file);
+ Artifact testSources = resolveArtifactForClassifier(artifact,
"test-sources");
+ if (testSources != null) {
+ testSourceArtifacts.add(testSources.getFile());
+ processedArtifacts.add(testSources);
} else {
- emptyTestSourceArtifacts.add(artifact.getId());
+ emptyTestSourceArtifacts.add(artifact);
}
}
}
- for (String artifactId : excludedArtifacts) {
- getLog().debug("Excluding " + artifactId + " from the shaded
jar.");
+ processedArtifacts.removeAll(excludedArtifacts);
+ processedArtifacts.removeAll(pomArtifacts);
+ processedArtifacts.removeAll(emptySourceArtifacts);
+ processedArtifacts.removeAll(emptyTestArtifacts);
+ processedArtifacts.removeAll(emptyTestSourceArtifacts);
+
+ for (Artifact artifact : excludedArtifacts) {
+ getLog().debug("Excluding " + artifact.getId() + " from the shaded
jar.");
}
- for (String artifactId : pomArtifacts) {
- getLog().debug("Skipping pom dependency " + artifactId + " in the
shaded jar.");
+ for (Artifact artifact : pomArtifacts) {
+ getLog().debug("Skipping pom dependency " + artifact.getId() + "
in the shaded jar.");
}
- for (String artifactId : emptySourceArtifacts) {
- getLog().warn("Skipping empty source jar " + artifactId + ".");
+ for (Artifact artifact : emptySourceArtifacts) {
+ getLog().warn("Skipping empty source jar " + artifact.getId() +
".");
}
- for (String artifactId : emptyTestArtifacts) {
- getLog().warn("Skipping empty test jar " + artifactId + ".");
+ for (Artifact artifact : emptyTestArtifacts) {
+ getLog().warn("Skipping empty test jar " + artifact.getId() + ".");
}
- for (String artifactId : emptyTestSourceArtifacts) {
- getLog().warn("Skipping empty test source jar " + artifactId +
".");
+ for (Artifact artifact : emptyTestSourceArtifacts) {
+ getLog().warn("Skipping empty test source jar " + artifact.getId()
+ ".");
}
+ return processedArtifacts;
}
private boolean invalidMainArtifact() {
@@ -868,7 +878,7 @@ public class ShadeMojo extends AbstractMojo {
}
}
- private File resolveArtifactForClassifier(Artifact artifact, String
classifier) {
+ private Artifact resolveArtifactForClassifier(Artifact artifact, String
classifier) {
Artifact toResolve = new DefaultArtifact(
artifact.getGroupId(),
artifact.getArtifactId(),
@@ -883,7 +893,8 @@ public class ShadeMojo extends AbstractMojo {
try {
org.eclipse.aether.artifact.Artifact resolved =
resolveArtifact(RepositoryUtils.toArtifact(toResolve));
if (resolved.getFile() != null) {
- return resolved.getFile();
+ toResolve.setFile(resolved.getFile());
+ return toResolve;
}
return null;
} catch (ArtifactResolutionException e) {
@@ -929,16 +940,17 @@ public class ShadeMojo extends AbstractMojo {
return Arrays.asList(transformers);
}
- private List<Filter> getFilters() throws MojoExecutionException {
+ private List<Filter> getFilters(List<Artifact> artifactCollection) throws
MojoExecutionException {
List<Filter> filters = new ArrayList<>();
List<SimpleFilter> simpleFilters = new ArrayList<>();
if (this.filters != null && this.filters.length > 0) {
Map<Artifact, ArtifactId> artifacts = new HashMap<>();
+ // artifactCollection does not contain project; that must also be
subjected to filtering
artifacts.put(project.getArtifact(), new
ArtifactId(project.getArtifact()));
- for (Artifact artifact : project.getArtifacts()) {
+ for (Artifact artifact : artifactCollection) {
artifacts.put(artifact, new ArtifactId(artifact));
}
@@ -954,16 +966,16 @@ public class ShadeMojo extends AbstractMojo {
jars.add(artifact.getFile());
if (createSourcesJar) {
- File file = resolveArtifactForClassifier(artifact,
"sources");
- if (file != null) {
- jars.add(file);
+ Artifact sources =
resolveArtifactForClassifier(artifact, "sources");
+ if (sources != null) {
+ jars.add(sources.getFile());
}
}
if (shadeTestJar) {
- File file = resolveArtifactForClassifier(artifact,
"tests");
- if (file != null) {
- jars.add(file);
+ Artifact tests =
resolveArtifactForClassifier(artifact, "tests");
+ if (tests != null) {
+ jars.add(tests.getFile());
}
}
}
diff --git
a/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
b/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
index 739aa0c..4066442 100644
--- a/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/shade/mojo/ShadeMojoTest.java
@@ -214,9 +214,9 @@ public class ShadeMojoTest extends AbstractMojoTestCase {
filtersField.set(mojo, new ArchiveFilter[] {archiveFilter});
// invoke getFilters()
- Method getFilters = ShadeMojo.class.getDeclaredMethod("getFilters");
+ Method getFilters = ShadeMojo.class.getDeclaredMethod("getFilters",
List.class);
getFilters.setAccessible(true);
- List<Filter> filters = (List<Filter>) getFilters.invoke(mojo);
+ List<Filter> filters = (List<Filter>) getFilters.invoke(mojo,
Collections.emptyList());
// assertions - there must be one filter
assertEquals(1, filters.size());