Skip to content

Commit 199ffae

Browse files
authored
Drop the cruft (#225)
* Drop commons-collections Single class mildly used it. Simple replacement added. * Drop other deprecated dependency * Null safe * Maven Artifact should be deprecated, is a mixed bad of mixed concepts * Remove inherited fluff
1 parent 912a81d commit 199ffae

File tree

5 files changed

+57
-86
lines changed

5 files changed

+57
-86
lines changed

.github/workflows/maven-verify.yml

-1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,3 @@ jobs:
2626
uses: apache/maven-gh-actions-shared/.github/workflows/maven-verify.yml@v4
2727
with:
2828
ff-jdk: "21"
29-
ff-jdk-distribution: "corretto"

pom.xml

+11-44
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
</contributors>
5555

5656
<prerequisites>
57-
<maven>${mavenVersion}</maven>
57+
<maven>3.6.3</maven>
5858
</prerequisites>
5959

6060
<scm>
@@ -79,35 +79,14 @@
7979
</distributionManagement>
8080

8181
<properties>
82-
<mavenVersion>3.6.3</mavenVersion>
82+
<mavenVersion>3.9.7</mavenVersion>
8383
<javaVersion>8</javaVersion>
84-
<sisu.version>0.3.5</sisu.version>
8584
<currentVersion>${project.version}</currentVersion>
8685
<asmVersion>9.7</asmVersion>
87-
<slf4j.version>1.7.32</slf4j.version>
86+
<slf4j.version>1.7.36</slf4j.version>
8887
<project.build.outputTimestamp>2024-04-20T15:33:41Z</project.build.outputTimestamp>
8988
</properties>
9089

91-
<dependencyManagement>
92-
<dependencies>
93-
<dependency>
94-
<groupId>org.eclipse.sisu</groupId>
95-
<artifactId>org.eclipse.sisu.inject</artifactId>
96-
<version>${sisu.version}</version>
97-
</dependency>
98-
<dependency>
99-
<groupId>org.eclipse.sisu</groupId>
100-
<artifactId>org.eclipse.sisu.plexus</artifactId>
101-
<version>${sisu.version}</version>
102-
</dependency>
103-
<dependency>
104-
<groupId>com.google.inject</groupId>
105-
<artifactId>guice</artifactId>
106-
<version>5.1.0</version>
107-
</dependency>
108-
</dependencies>
109-
</dependencyManagement>
110-
11190
<dependencies>
11291
<!-- Maven -->
11392
<dependency>
@@ -144,10 +123,7 @@
144123
<dependency>
145124
<groupId>org.codehaus.plexus</groupId>
146125
<artifactId>plexus-utils</artifactId>
147-
</dependency>
148-
<dependency>
149-
<groupId>org.codehaus.plexus</groupId>
150-
<artifactId>plexus-xml</artifactId>
126+
<version>3.5.1</version>
151127
</dependency>
152128

153129
<!-- DI -->
@@ -181,25 +157,20 @@
181157
<version>2.0.6.1</version>
182158
</dependency>
183159
<dependency>
184-
<groupId>org.apache.maven.shared</groupId>
185-
<artifactId>maven-dependency-tree</artifactId>
186-
<version>3.2.1</version>
160+
<groupId>org.apache.commons</groupId>
161+
<artifactId>commons-compress</artifactId>
162+
<version>1.26.2</version>
187163
</dependency>
188164
<dependency>
189165
<groupId>commons-io</groupId>
190166
<artifactId>commons-io</artifactId>
191-
<version>2.13.0</version>
167+
<version>2.16.1</version>
192168
</dependency>
193169
<dependency>
194170
<groupId>org.vafer</groupId>
195171
<artifactId>jdependency</artifactId>
196172
<version>2.10</version>
197173
</dependency>
198-
<dependency>
199-
<groupId>org.apache.commons</groupId>
200-
<artifactId>commons-collections4</artifactId>
201-
<version>4.4</version>
202-
</dependency>
203174

204175
<!-- Test -->
205176
<!-- Used by: TransformerTesterRule only -->
@@ -211,6 +182,7 @@
211182
<dependency>
212183
<groupId>com.google.inject</groupId>
213184
<artifactId>guice</artifactId>
185+
<version>5.1.0</version>
214186
<scope>test</scope>
215187
</dependency>
216188
<dependency>
@@ -228,13 +200,13 @@
228200
<dependency>
229201
<groupId>org.xmlunit</groupId>
230202
<artifactId>xmlunit-legacy</artifactId>
231-
<version>2.9.1</version>
203+
<version>2.10.0</version>
232204
<scope>test</scope>
233205
</dependency>
234206
<dependency>
235207
<groupId>org.mockito</groupId>
236208
<artifactId>mockito-core</artifactId>
237-
<version>2.28.2</version>
209+
<version>3.12.4</version>
238210
<scope>test</scope>
239211
</dependency>
240212
<dependency>
@@ -255,11 +227,6 @@
255227
<version>3.3.0</version>
256228
<scope>test</scope>
257229
</dependency>
258-
<dependency>
259-
<groupId>org.apache.commons</groupId>
260-
<artifactId>commons-compress</artifactId>
261-
<version>1.26.1</version>
262-
</dependency>
263230
</dependencies>
264231

265232
<build>

src/main/java/org/apache/maven/plugins/shade/DefaultShader.java

+15-15
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,26 @@
2424
import java.io.BufferedOutputStream;
2525
import java.io.ByteArrayInputStream;
2626
import java.io.File;
27-
import java.io.FileInputStream;
2827
import java.io.IOException;
2928
import java.io.InputStream;
3029
import java.io.InputStreamReader;
3130
import java.io.OutputStreamWriter;
3231
import java.io.PushbackInputStream;
3332
import java.io.Writer;
3433
import java.nio.charset.StandardCharsets;
34+
import java.nio.file.Files;
3535
import java.util.ArrayList;
3636
import java.util.Arrays;
3737
import java.util.Calendar;
3838
import java.util.Collection;
3939
import java.util.Collections;
4040
import java.util.Enumeration;
41+
import java.util.HashMap;
4142
import java.util.HashSet;
4243
import java.util.Iterator;
4344
import java.util.LinkedList;
4445
import java.util.List;
46+
import java.util.Map;
4547
import java.util.Objects;
4648
import java.util.Set;
4749
import java.util.concurrent.Callable;
@@ -54,8 +56,6 @@
5456
import java.util.zip.ZipEntry;
5557
import java.util.zip.ZipException;
5658

57-
import org.apache.commons.collections4.MultiValuedMap;
58-
import org.apache.commons.collections4.multimap.HashSetValuedHashMap;
5959
import org.apache.commons.compress.archivers.zip.ExtraFieldUtils;
6060
import org.apache.commons.compress.archivers.zip.X5455_ExtendedTimestamp;
6161
import org.apache.commons.compress.archivers.zip.ZipExtraField;
@@ -137,26 +137,26 @@ public void shade(ShadeRequest shadeRequest) throws IOException, MojoExecutionEx
137137
goThroughAllJarEntriesForManifestTransformer(shadeRequest, resources, manifestTransformer, out);
138138

139139
// CHECKSTYLE_OFF: MagicNumber
140-
MultiValuedMap<String, File> duplicates = new HashSetValuedHashMap<>(10000, 3);
140+
Map<String, HashSet<File>> duplicates = new HashMap<>();
141141
// CHECKSTYLE_ON: MagicNumber
142142

143143
shadeJars(shadeRequest, resources, transformers, out, duplicates, packageMapper);
144144

145145
// CHECKSTYLE_OFF: MagicNumber
146-
MultiValuedMap<Collection<File>, String> overlapping = new HashSetValuedHashMap<>(20, 15);
146+
Map<Collection<File>, HashSet<String>> overlapping = new HashMap<>();
147147
// CHECKSTYLE_ON: MagicNumber
148148

149149
for (String clazz : duplicates.keySet()) {
150150
Collection<File> jarz = duplicates.get(clazz);
151151
if (jarz.size() > 1) {
152-
overlapping.put(jarz, clazz);
152+
overlapping.computeIfAbsent(jarz, k -> new HashSet<>()).add(clazz);
153153
}
154154
}
155155

156156
// Log a summary of duplicates
157157
logSummaryOfDuplicates(overlapping);
158158

159-
if (overlapping.keySet().size() > 0) {
159+
if (!overlapping.keySet().isEmpty()) {
160160
showOverlappingWarning();
161161
}
162162

@@ -230,7 +230,7 @@ private void shadeJars(
230230
Set<String> resources,
231231
List<ResourceTransformer> transformers,
232232
JarOutputStream jos,
233-
MultiValuedMap<String, File> duplicates,
233+
Map<String, HashSet<File>> duplicates,
234234
DefaultPackageMapper packageMapper)
235235
throws IOException {
236236
for (File jar : shadeRequest.getJars()) {
@@ -262,7 +262,7 @@ private void shadeDir(
262262
List<ResourceTransformer> transformers,
263263
DefaultPackageMapper packageMapper,
264264
JarOutputStream jos,
265-
MultiValuedMap<String, File> duplicates,
265+
Map<String, HashSet<File>> duplicates,
266266
File jar,
267267
File current,
268268
String prefix,
@@ -308,7 +308,7 @@ private void shadeDir(
308308
new Callable<InputStream>() {
309309
@Override
310310
public InputStream call() throws Exception {
311-
return new FileInputStream(file);
311+
return Files.newInputStream(file.toPath());
312312
}
313313
},
314314
name,
@@ -326,7 +326,7 @@ private void shadeJar(
326326
List<ResourceTransformer> transformers,
327327
DefaultPackageMapper packageMapper,
328328
JarOutputStream jos,
329-
MultiValuedMap<String, File> duplicates,
329+
Map<String, HashSet<File>> duplicates,
330330
File jar,
331331
List<Filter> jarFilters)
332332
throws IOException {
@@ -387,7 +387,7 @@ private void shadeJarEntry(
387387
List<ResourceTransformer> transformers,
388388
DefaultPackageMapper packageMapper,
389389
JarOutputStream jos,
390-
MultiValuedMap<String, File> duplicates,
390+
Map<String, HashSet<File>> duplicates,
391391
File jar,
392392
Callable<InputStream> inputProvider,
393393
String name,
@@ -406,7 +406,7 @@ private void shadeJarEntry(
406406
}
407407
}
408408

409-
duplicates.put(name, jar);
409+
duplicates.computeIfAbsent(name, k -> new HashSet<>()).add(jar);
410410
if (name.endsWith(".class")) {
411411
addRemappedClass(jos, jar, name, time, in, packageMapper);
412412
} else if (shadeRequest.isShadeSourcesContent() && name.endsWith(".java")) {
@@ -426,7 +426,7 @@ private void shadeJarEntry(
426426

427427
addResource(resources, jos, mappedName, inputProvider, time, method);
428428
} else {
429-
duplicates.removeMapping(name, jar);
429+
duplicates.computeIfAbsent(name, k -> new HashSet<>()).remove(jar);
430430
}
431431
}
432432
}
@@ -471,7 +471,7 @@ private void showOverlappingWarning() {
471471
logger.warn("See https://maven.apache.org/plugins/maven-shade-plugin/");
472472
}
473473

474-
private void logSummaryOfDuplicates(MultiValuedMap<Collection<File>, String> overlapping) {
474+
private void logSummaryOfDuplicates(Map<Collection<File>, HashSet<String>> overlapping) {
475475
for (Collection<File> jarz : overlapping.keySet()) {
476476
List<String> jarzS = new ArrayList<>();
477477

src/main/java/org/apache/maven/plugins/shade/mojo/ShadeMojo.java

+30-25
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.List;
3636
import java.util.Map;
3737
import java.util.Set;
38+
import java.util.stream.Collectors;
3839

3940
import org.apache.maven.RepositoryUtils;
4041
import org.apache.maven.artifact.Artifact;
@@ -67,12 +68,13 @@
6768
import org.apache.maven.project.ProjectBuildingException;
6869
import org.apache.maven.project.ProjectBuildingRequest;
6970
import org.apache.maven.project.ProjectBuildingResult;
70-
import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder;
71-
import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException;
72-
import org.apache.maven.shared.dependency.graph.DependencyNode;
7371
import org.codehaus.plexus.util.IOUtil;
7472
import org.codehaus.plexus.util.WriterFactory;
7573
import org.eclipse.aether.RepositorySystem;
74+
import org.eclipse.aether.collection.CollectRequest;
75+
import org.eclipse.aether.collection.CollectResult;
76+
import org.eclipse.aether.collection.DependencyCollectionException;
77+
import org.eclipse.aether.graph.DependencyNode;
7678
import org.eclipse.aether.resolution.ArtifactRequest;
7779
import org.eclipse.aether.resolution.ArtifactResolutionException;
7880
import org.eclipse.aether.resolution.ArtifactResult;
@@ -400,12 +402,6 @@ public class ShadeMojo extends AbstractMojo {
400402
@Inject
401403
private RepositorySystem repositorySystem;
402404

403-
/**
404-
* The dependency graph builder to use.
405-
*/
406-
@Inject
407-
private DependencyGraphBuilder dependencyGraphBuilder;
408-
409405
/**
410406
* ProjectBuilder, needed to create projects from the artifacts.
411407
*/
@@ -985,7 +981,7 @@ private File shadedTestArtifactFile() {
985981
// We need to find the direct dependencies that have been included in the uber JAR so that we can modify the
986982
// POM accordingly.
987983
private void createDependencyReducedPom(Set<String> artifactsToRemove)
988-
throws IOException, DependencyGraphBuilderException, ProjectBuildingException {
984+
throws IOException, ProjectBuildingException, DependencyCollectionException {
989985
List<Dependency> transitiveDeps = new ArrayList<>();
990986

991987
// NOTE: By using the getArtifacts() we get the completely evaluated artifacts
@@ -1053,7 +1049,7 @@ private void createDependencyReducedPom(Set<String> artifactsToRemove)
10531049

10541050
private void rewriteDependencyReducedPomIfWeHaveReduction(
10551051
List<Dependency> dependencies, boolean modified, List<Dependency> transitiveDeps, Model model)
1056-
throws IOException, ProjectBuildingException, DependencyGraphBuilderException {
1052+
throws IOException, ProjectBuildingException, DependencyCollectionException {
10571053
if (modified) {
10581054
for (int loopCounter = 0; modified; loopCounter++) {
10591055

@@ -1182,18 +1178,30 @@ private String getId(String groupId, String artifactId, String type, String clas
11821178

11831179
public boolean updateExcludesInDeps(
11841180
MavenProject project, List<Dependency> dependencies, List<Dependency> transitiveDeps)
1185-
throws DependencyGraphBuilderException {
1186-
MavenProject original = session.getProjectBuildingRequest().getProject();
1187-
try {
1188-
session.getProjectBuildingRequest().setProject(project);
1189-
DependencyNode node =
1190-
dependencyGraphBuilder.buildDependencyGraph(session.getProjectBuildingRequest(), null);
1191-
boolean modified = false;
1192-
for (DependencyNode n2 : node.getChildren()) {
1193-
String artifactId2 = getId(n2.getArtifact());
1181+
throws DependencyCollectionException {
1182+
CollectRequest collectRequest = new CollectRequest();
1183+
collectRequest.setRootArtifact(RepositoryUtils.toArtifact(project.getArtifact()));
1184+
collectRequest.setRepositories(project.getRemoteProjectRepositories());
1185+
collectRequest.setDependencies(project.getDependencies().stream()
1186+
.map(d -> RepositoryUtils.toDependency(
1187+
d, session.getRepositorySession().getArtifactTypeRegistry()))
1188+
.collect(Collectors.toList()));
1189+
if (project.getDependencyManagement() != null) {
1190+
collectRequest.setManagedDependencies(project.getDependencyManagement().getDependencies().stream()
1191+
.map(d -> RepositoryUtils.toDependency(
1192+
d, session.getRepositorySession().getArtifactTypeRegistry()))
1193+
.collect(Collectors.toList()));
1194+
}
1195+
CollectResult result = repositorySystem.collectDependencies(session.getRepositorySession(), collectRequest);
1196+
boolean modified = false;
1197+
if (result.getRoot() != null) {
1198+
for (DependencyNode n2 : result.getRoot().getChildren()) {
1199+
String artifactId2 = getId(RepositoryUtils.toArtifact(n2.getArtifact()));
11941200

11951201
for (DependencyNode n3 : n2.getChildren()) {
1196-
Artifact artifact3 = n3.getArtifact();
1202+
// stupid m-a Artifact that has no idea what it is: dependency or artifact?
1203+
Artifact artifact3 = RepositoryUtils.toArtifact(n3.getArtifact());
1204+
artifact3.setScope(n3.getDependency().getScope());
11971205
String artifactId3 = getId(artifact3);
11981206

11991207
// check if it really isn't in the list of original dependencies. Maven
@@ -1240,11 +1248,8 @@ public boolean updateExcludesInDeps(
12401248
}
12411249
}
12421250
}
1243-
return modified;
1244-
} finally {
1245-
// restore it
1246-
session.getProjectBuildingRequest().setProject(original);
12471251
}
1252+
return modified;
12481253
}
12491254

12501255
private boolean dependencyHasExclusion(Dependency dep, Artifact exclusionToCheck) {

src/main/java/org/apache/maven/plugins/shade/resource/properties/io/NoCloseOutputStream.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import java.io.OutputStream;
2323

2424
/**
25-
* Simple output stream replacing close call by a simpe flush.
25+
* Simple output stream replacing close call by a simple flush.
2626
* Useful for output streams nesting streams (like jar output streams) and using a stream encoder.
2727
*/
2828
public class NoCloseOutputStream extends OutputStream {

0 commit comments

Comments
 (0)